首页Python【Python数据分析】1...

【Python数据分析】16.重建索引


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接: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

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments