惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
P
Proofpoint News Feed
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
博客园 - Franky
V
V2EX
爱范儿
爱范儿
J
Java Code Geeks
小众软件
小众软件
Last Week in AI
Last Week in AI
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
酷 壳 – CoolShell
酷 壳 – CoolShell
The Register - Security
The Register - Security
GbyAI
GbyAI
Vercel News
Vercel News
Y
Y Combinator Blog
腾讯CDC
F
Fortinet All Blogs
I
InfoQ
N
Netflix TechBlog - Medium
B
Blog RSS Feed
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
Scott Helme
Scott Helme
T
Tor Project blog
U
Unit 42
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
aimingoo的专栏
aimingoo的专栏
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
Security Archives - TechRepublic
Security Archives - TechRepublic

极客兔兔

Go sync.Cond | Go 语言高性能编程 Go 死码消除与调试(debug)模式 | Go 语言高性能编程 Go sync.Once | Go 语言高性能编程 Go 逃逸分析 | Go 语言高性能编程 2020 年终总结 | 极客兔兔 Go struct 内存对齐 | Go 语言高性能编程 Go 空结构体 struct{} 的使用 | Go 语言高性能编程 控制协程(goroutine)的并发数量 | Go 语言高性能编程 | 极客兔兔 如何退出协程 goroutine (其他场景) | Go 语言高性能编程 如何退出协程 goroutine (超时场景) | Go 语言高性能编程 Go 语言陷阱 - 数组和切片 | Go 语言高性能编程 减小 Go 代码编译后的二进制体积 | Go 语言高性能编程 Go Reflect 提高反射性能 | Go 语言高性能编程 读写锁和互斥锁的性能比较 | Go 语言高性能编程 | 极客兔兔 for 和 range 的性能比较 | Go 语言高性能编程 切片(slice)性能及陷阱 | Go 语言高性能编程 | 极客兔兔 字符串拼接性能及原理 | Go 语言高性能编程 | 极客兔兔 pprof 性能分析 | Go 语言高性能编程 benchmark 基准测试 | Go 语言高性能编程 Go 语言高性能编程 | 极客兔兔 Go 接口型函数的使用场景 | 极客兔兔 Python 简明教程 | 快速入门 | 极客兔兔 Go 语言笔试面试题(代码输出) | 极客面试 | 极客兔兔 动手写RPC框架 - GeeRPC第七天 服务发现与注册中心(registry) | 极客兔兔 动手写RPC框架 - GeeRPC第六天 负载均衡(load balance) 动手写RPC框架 - GeeRPC第五天 支持HTTP协议 | 极客兔兔 动手写RPC框架 - GeeRPC第四天 超时处理(timeout) | 极客兔兔 动手写RPC框架 - GeeRPC第三天 服务注册(service register) 动手写RPC框架 - GeeRPC第二天 支持并发与异步的客户端 | 极客兔兔 动手写RPC框架 - GeeRPC第一天 服务端与消息编码 | 极客兔兔 7天用Go从零实现RPC框架GeeRPC | 极客兔兔 Go 语言笔试面试题(并发编程) | 极客面试 | 极客兔兔 Go 语言笔试面试题(基础语法) | 极客面试 | 极客兔兔 Go 语言笔试面试题汇总 | 极客面试 | 极客兔兔 Go Context 并发编程简明教程 | 快速入门 Go Mmap 文件内存映射简明教程 | 快速入门 动手写ORM框架 - GeeORM第七天 数据库迁移(Migrate) | 极客兔兔 动手写ORM框架 - GeeORM第六天 支持事务(Transaction) | 极客兔兔 动手写ORM框架 - GeeORM第五天 实现钩子(Hooks) | 极客兔兔 动手写ORM框架 - GeeORM第四天 链式操作与更新删除 | 极客兔兔 动手写ORM框架 - GeeORM第三天 记录新增和查询 | 极客兔兔 动手写ORM框架 - GeeORM第二天 对象表结构映射 | 极客兔兔 动手写ORM框架 - GeeORM第一天 database/sql 基础 SQLite 常用命令 | 速查表(Cheat Sheet) 7天用Go从零实现ORM框架GeeORM | 极客兔兔 动手写分布式缓存 - GeeCache第七天 使用 Protobuf 通信 动手写分布式缓存 - GeeCache第六天 防止缓存击穿 | 极客兔兔 动手写分布式缓存 - GeeCache第五天 分布式节点 | 极客兔兔 动手写分布式缓存 - GeeCache第四天 一致性哈希(hash) | 极客兔兔 Go Mock (gomock)简明教程 | 快速入门 动手写分布式缓存 - GeeCache第三天 HTTP 服务端 动手写分布式缓存 - GeeCache第二天 单机并发缓存 | 极客兔兔 Go Test 单元测试简明教程 | 快速入门 7天用Go从零实现分布式缓存GeeCache | 极客兔兔 Go WebAssembly (Wasm) 简明教程 | 快速入门 Go RPC & TLS 鉴权简明教程 | 快速入门 Go Protobuf 简明教程 | 快速入门 Go语言动手写Web框架 - Gee第七天 错误恢复(Panic Recover) WSL, Git, Mircosoft Terminal 等常用工具配置 Rust 简明教程 | 快速入门 | 极客兔兔 Go语言动手写Web框架 - Gee第六天 模板(HTML Template) 百宝箱 - 值得收藏的工具网站 | 极客兔兔 Go语言动手写Web框架 - Gee第五天 中间件Middleware | 极客兔兔 Go语言动手写Web框架 - Gee第四天 分组控制Group | 极客兔兔 Go语言动手写Web框架 - Gee第三天 前缀树路由Router | 极客兔兔 博客折腾记(七) - Gitalk Plus | 极客兔兔 Go语言动手写Web框架 - Gee第二天 上下文Context | 极客兔兔 Go2 新特性简明教程 | 快速入门 | 极客兔兔 博客折腾记(六) - 不要为了流量忘记了初心 | 极客兔兔 Go语言动手写Web框架 - Gee第一天 http.Handler | 极客兔兔 7天用Go从零实现Web框架Gee教程 | 极客兔兔 Go Gin 简明教程 | 快速入门 Go 语言简明教程 | 快速入门 | 极客兔兔 机器学习笔试面试题 11-20 | 极客面试 | 极客兔兔 机器学习笔试面试题 1-10 | 极客面试 | 极客兔兔 机器学习笔试面试题汇总 | 极客面试 | 极客兔兔 TensorFlow 2 中文文档 - RNN LSTM 文本分类 TensorFlow 2 中文文档 - TFHub 迁移学习 TensorFlow 2 中文文档 - 卷积神经网络分类 CIFAR-10 TensorFlow 2 中文文档 - 保存与加载模型 TensorFlow 2 中文文档 - 过拟合与欠拟合 TensorFlow 2 中文文档 - 回归预测燃油效率 TensorFlow 2 中文文档 - 特征工程结构化数据分类 TensorFlow 2 中文文档 - IMDB 文本分类 TensorFlow 2 中文文档 - MNIST 图像分类 TensorFlow 2 / 2.0 中文文档 TensorFlow 2.0 (九) - 强化学习 70行代码实战 Policy Gradient 博客折腾记(五) - 友链这件事,没那么简单 | 极客兔兔 博客折腾记(四) - 原创资格是争取来的 | 极客兔兔 TensorFlow 2.0 (八) - 强化学习 DQN 玩转 gym Mountain Car TensorFlow 2.0 (七) - 强化学习 Q-Learning 玩转 OpenAI gym 博客折腾记(三) - 主题设计、彩蛋与阅读量翻倍 | 极客兔兔 TensorFlow 2.0 (六) - 监督学习玩转 OpenAI gym game 博客折腾记(二) - 对搜索引擎的理解 | 极客兔兔 博客折腾记(一) - 极致性能的尝试 | 极客兔兔 Pandas 数据处理(三) - Cheat Sheet 中文版 TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) TensorFlow入门(四) - mnist手写数字识别(制作h5py训练集) | 极客兔兔 TensorFlow入门(三) - mnist手写数字识别(可视化训练) | 极客兔兔 Pandas 数据处理(二) - 筛选数据 | 极客兔兔
Pandas 数据处理(一) - DataFrame 与 Series
2018-03-20 · via 极客兔兔

本文示例基于 Version 0.21.0

DataFrame和Series是pandas中最常见的2种数据结构。DataFrame可以理解为Excel中的一张表,Series可以理解为一张Excel表的一行或一列数据。

一、Series

Series可以理解为一维数组,它和一维数组的区别,在于Series具有索引。

1. 创建Series

  • 默认索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
money_series = pd.Series([200, 300, 10, 5], name="money") 
"""
0 200
1 300
2 10
3 5
Name: money, dtype: int64
"""
money_series[0]

money_series = money_series.sort_values()
"""
3 5
2 10
0 200
1 300
Name: money, dtype: int64
"""
money_series[0]

money_series.iloc[0]

  • 自定义索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
money_series = pd.Series([200, 300, 10, 5], index=['d', 'c', 'b', 'a'], name='money') 
"""
d 200
c 300
b 10
a 5
Name: money, dtype: int64
"""
money_series.index

money_series['a']

money_series = money_series.sort_index()
"""
a 5
b 10
c 300
d 200
Name: money, dtype: int64
"""
money_series.iloc[-1]

2. 切片与取值

  • 根据索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
money_series = pd.Series({'d': 200, 'c': 300, 'b': 10, 'a': 5}, name='money')
"""
a 200
b 300
c 10
d 5
Name: money, dtype: int64
"""
money_series.loc['a']

money_series.loc['c':'a':-1]
"""
c 10
b 300
a 200
Name: money, dtype: int64
"""
money_series.loc[['d', 'a']]
"""
d 5
a 200
"""
  • 根据序号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
money_series.iloc[0]

money_series.iloc[1:3]
"""
b 300
c 10
Name: money, dtype: int64
"""
money_series.iloc[[3, 0]]
"""
d 5
a 200
Name: money, dtype: int64
"""
  • 根据条件
1
2
3
4
5
6
7
8
9
10
11
12
13
money_series[money_series > 50] 
"""
c 300
d 200
Name: money, dtype: int64
"""
money_series[lambda x: x ** 2 > 50]
"""
b 10
c 300
d 200
Name: money, dtype: int64
"""

二、DataFrame

1. 创建DataFrame

  • 从字典中创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


df = pd.DataFrame({'单价': [100, 200, 30], '数量': [3, 3, 10]})
"""
单价 数量
0 100 3
1 200 3
2 30 10
"""


df = pd.DataFrame({'单价': [100, 200, 30], '数量': [3, 3, 10]}, index=['T001', 'T002', 'T003'])
"""
单价 数量
T001 100 3
T002 200 3
T003 30 10
"""
  • 通过Series创建
1
2
3
4
5
6
7
8
9
10
11
12
price_series = pd.Series([100, 200, 30], index=['T001', 'T002', 'T005'])
quantity_series = pd.Series([3, 3, 10, 2], index=['T001', 'T002', 'T003', 'T004'])
df = pd.DataFrame({'单价': price_series, '数量': quantity_series})

"""
单价 数量
T001 100.0 3.0
T002 200.0 3.0
T003 NaN 10.0
T004 NaN 2.0
T005 30.0 NaN
"""
  • 从Excel文件中读取,demo.dat
1
2
3
df = pd.read_excel("path/demo.xlsx", sheetname=0)

df = pd.read_excel("path/demo.xlsx", sheetname='销售记录')
  • 从普通文本中读取
1
2
3
4
5
6
编号|日期|单价|数量
T001|2018-03-02 12:34:05|100|3
T002|2018-03-02 13:04:05|200|3
T003|2018-03-03 18:12:31|30|10
T004|2018-03-04 20:34:05|400|2
T005|2018-03-02 20:34:05|500|1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
df = pd.read_csv('demo.dat', delimiter='|') 
"""
编号 日期 单价 数量
0 T001 2018-03-02 12:34:05 100 3
1 T002 2018-03-02 13:04:05 200 3
2 T003 2018-03-03 18:12:31 30 10
3 T004 2018-03-04 20:34:05 400 2
4 T005 2018-03-02 20:34:05 500 1
"""

df = pd.read_csv('demo.dat', delimiter='|', index_col='编号')
"""
日期 单价 数量
编号
T001 2018-03-02 12:34:05 100 3
T002 2018-03-02 13:04:05 200 3
T003 2018-03-03 18:12:31 30 10
T004 2018-03-04 20:34:05 400 2
T005 2018-03-02 20:34:05 500 1
"""

2. 获取列与行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
df['日期'] 
"""
0 2018-03-02 12:34:05
1 2018-03-02 13:04:05
2 2018-03-03 18:12:31
3 2018-03-04 20:34:05
4 2018-03-02 20:34:05
Name: 日期, dtype: object
"""
df[['单价', '数量']]
"""
单价 数量
0 100 3
1 200 3
2 30 10
3 400 2
4 500 1
"""
df.loc['T001']
df.iloc[0]
"""
日期 2018-03-02 12:34:05
单价 100
数量 3
Name: T001, dtype: object
"""
df.head(3)
df.tail(3)
"""
日期 单价 数量
编号
T003 2018-03-03 18:12:31 30 10
T004 2018-03-04 20:34:05 400 2
T005 2018-03-02 20:34:05 500 1
"""

3. 修改

  • 单价 * 2
1
2
3
4
5
6
7
8
9
10
11
12
13
df['单价'] *= 2



"""
日期 单价 数量
编号
T001 2018-03-02 12:34:05 200 3
T002 2018-03-02 13:04:05 400 3
T003 2018-03-03 18:12:31 60 10
T004 2018-03-04 20:34:05 800 2
T005 2018-03-02 20:34:05 1000 1
"""
  • 编号加上前缀
1
2
3
4
5
6
7
8
9
10

df.index = '2018_' + df.index
"""
日期 单价 数量
2018_T001 2018-03-02 12:34:05 200 3
2018_T002 2018-03-02 13:04:05 400 3
2018_T003 2018-03-03 18:12:31 60 10
2018_T004 2018-03-04 20:34:05 800 2
2018_T005 2018-03-02 20:34:05 1000 1
"""
  • 数量小于3的记录,单价 + 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def change_price(x):
if x['数量'] < 3:
return x['单价'] + 10
return x['单价']


df['单价'] = df.apply(change_price, axis=1)
"""
日期 单价 数量
2018_T001 2018-03-02 12:34:05 200 3
2018_T002 2018-03-02 13:04:05 400 3
2018_T003 2018-03-03 18:12:31 60 10
2018_T004 2018-03-04 20:34:05 810 2
2018_T005 2018-03-02 20:34:05 1010 1
"""
  • 增加物流公司
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
df['运费'] = pd.Series({'2018_T001': 10, '2018_T005': 12})
"""
日期 单价 数量 运费
2018_T001 2018-03-02 12:34:05 200 3 10.0
2018_T002 2018-03-02 13:04:05 400 3 NaN
2018_T003 2018-03-03 18:12:31 60 10 NaN
2018_T004 2018-03-04 20:34:05 810 2 NaN
2018_T005 2018-03-02 20:34:05 1010 1 12.0
"""

df.fillna(0)
"""
日期 单价 数量 运费
2018_T001 2018-03-02 12:34:05 200 3 10.0
2018_T002 2018-03-02 13:04:05 400 3 0.0
2018_T003 2018-03-03 18:12:31 60 10 0.0
2018_T004 2018-03-04 20:34:05 810 2 0.0
2018_T005 2018-03-02 20:34:05 1010 1 12.0
"""

4. 删除

  • 删除日期列(就地删除)
1
2
3
4
5
6
7
8
9
del df['日期']
"""
单价 数量 运费
2018_T001 200 3 10.0
2018_T002 400 3 NaN
2018_T003 60 10 NaN
2018_T004 810 2 NaN
2018_T005 1010 1 12.0
"""
  • 删除运费列(返回筛选后的)
1
2
3
4
5
6
7
8
9
10
11
new_columns = list(df.columns)
new_columns.remove('运费')
df = df[new_columns]
"""
单价 数量
2018_T001 200 3
2018_T002 400 3
2018_T003 60 10
2018_T004 810 2
2018_T005 1010 1
"""

附 推荐



上一篇 « TensorFlow入门(二) - mnist手写数字识别(模型保存加载) 下一篇 » Pandas 数据处理(二) - 筛选数据

© 2026 - 极客兔兔 - 沪ICP备18001798号-1

👁   📚