本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis
根据《Python for Data Analysis 3rd Edition》翻译整理
—————-————————————-
reindex()
方法用于创建一个符合新索引的新对象。
1.Series
调用reindex()
方法会将数据按照新的索引进行排序,如果某个索引值之前不存在的话,则会引入缺失值NaN。
1>>> obj = pd.Series([1,2,3,4],index=['a','b','c','d'])
2>>> obj
3a 1
4b 2
5c 3
6d 4
7dtype: int64
8
9>>> obj_new = obj.reindex(['e','d','c','b','a'])
10>>> obj_new
11e NaN
12d 4.0
13c 3.0
14b 2.0
15a 1.0
16dtype: float64
对于像时间序列这样的有序数据,您可能希望在重新索引时进行一些插值或值填充。method 参数允许使用插值方式来填充缺失值。
1>>> obj = pd.Series(['a','b','c'],index=[1,3,5])
2>>> obj
31 a
43 b
55 c
6dtype: object
7
8# ffill将值向前填充
9>>> obj_new = obj.reindex(range(6),method='ffill')
10>>> obj_new
110 NaN
121 a
132 a
143 b
154 b
165 c
17dtype: object
18
19# bfill将值向后填充
20>>> obj_new = obj.reindex(range(6),method='bfill')
21>>> obj_new
220 a
231 a
242 b
253 b
264 c
275 c
28dtype: object
也可以通过fill_value参数指定填充值。
1>>> obj_new = obj.reindex(range(6),fill_value='XXX')
2>>> obj_new
30 XXX
41 a
52 XXX
63 b
74 XXX
85 c
9dtype: object
2.DataFrame
对于DataFrame对象reindex()
方法可以重建行索引、列索引,也可以同时改变两者。
当只传入一个序列的时候(也可以使用index关键字传递),只会对行进行重建索引。
1>>> df = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','b','c'],columns=['X','Y','Z'])
2>>> df
3 X Y Z
4a 0 1 2
5b 3 4 5
6c 6 7 8
7
8>>> df.reindex(['a','b','c','d'])
9
10 X Y Z
11a 0.0 1.0 2.0
12b 3.0 4.0 5.0
13c 6.0 7.0 8.0
14d NaN NaN NaN
15
16>>> df.reindex(index=['d','c','b','a'])
17
18 X Y Z
19d NaN NaN NaN
20c 6.0 7.0 8.0
21b 3.0 4.0 5.0
22a 0.0 1.0 2.0
如果只对列重建索引的话,可以通过使用columns关键字完成。
1>>> df.reindex(columns=['Y','Z','X'])
2
3 Y Z X
4a 1 2 0
5b 4 5 3
6c 7 8 6
另一种对某一轴进行重新索引的方法是,将新的轴标签作为一个位置参数传递,然后用轴关键字指定要重新索引的轴。
1>>> df.reindex(['a','b','e'] , axis=0)
2 X Y Z
3a 0.0 1.0 2.0
4b 3.0 4.0 5.0
5e NaN NaN NaN
6
7>>> df.reindex(['a','b','e'] , axis='index')
8 X Y Z
9a 0.0 1.0 2.0
10b 3.0 4.0 5.0
11e NaN NaN NaN
12
13>>> df.reindex(['Z','Y','X'] , axis=1)
14 Z Y X
15a 2 1 0
16b 5 4 3
17c 8 7 6
18
19>>> df.reindex(['Z','Y','X'] , axis='columns')
20 Z Y X
21a 2 1 0
22b 5 4 3
23c 8 7 6
reindex()
方法的参数如下所示:
参数 |
说明 |
labels | 用作索引的新序列。可以是 Index 实例或任何其他类似序列的 Python 数据结构。 |
index | 新的行自定义索引 |
columns | 新的列自定义索引 |
axis | 要重新索引的轴,默认为index |
method | 填充方法,ffill当前值向前填充,bfill向后填充 |
fill_value | 重新索引中,用于填充缺失位置的值 |
limit | 最大填充量 |
tolerance | 不精确匹配填充时的最大距离 |
level | 在 MultiIndex 级别上匹配简单索引;否则选择子集。 |
copy | 默认True,生成新的对象,False时,新旧相等不复制 |
还可以使用 loc 运算符进行重新索引,不过该方式仅在所有新索引标签都已存在于 DataFrame 中时有效(而 reindex 会为新标签插入缺失数据)。
1>>> df.loc[['c','b','a'] , ['Z','Y','X']]
2 Z Y X
3c 8 7 6
4b 5 4 3
5a 2 1 0
本篇文章来源于微信公众号: 码农设计师