redindex()方法:对DataFrame数据帧的行进行重新排列

我们可以命名DataFrame数据的columns参数来对DF数据的列进行排序,而对于行,我们则可以使用reindex()方法进行排序。注意reindex方法的参数是一个列表,列表中index的顺序,就是希望DF数据排序的顺序。注意和drop一样,reindex方法不会直接在data上生效,而需要重新复制才可以改变原来的数据。
示例代码如下:

import pandas as pd
dict_data = {
	'student':["Li Lei","Han Meimei","Tom"],
	'score'	:[95,98,92],
	'gender':['M','F','M']
}
DF_data = pd.DataFrame(dict_data,columns=['gender','student','score'],index=['a','b','c'])
print(DF_data)
reindex_list = ['c','a','b']
DF_data = DF_data.reindex(reindex_list)
print(DF_data)

运行结果如下:

  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
  gender     student  score
c      M         Tom     92
a      M      Li Lei     95
b      F  Han Meimei     98
[Finished in 3.8s]

现在问题来了,如果reindex_list中存在原来DF数据中不存在的元素怎么办?比如我们把以上代码中的

reindex_list = ['c','a','b']

改为

reindex_list = ['c','a','b','d']

运行结果如下:

  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
  gender     student  score
c      M         Tom   92.0
a      M      Li Lei   95.0
b      F  Han Meimei   98.0
d    NaN         NaN    NaN
[Finished in 4.5s]

我们发现最后data中多了一行,它的index是’d’,而它的全部元素都被设置为NaN。我们可以在reindex方法中设置参数,把这个讨厌的NaN改成其他的数值,这里提供两种参数,第一个是fill_value参数,可以把NaN全部改成指定的fill_value值,比如我们把

DF_data = DF_data.reindex(reindex_list)

改成

DF_data = DF_data.reindex(reindex_list,fill_value=0)
  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
  gender     student  score
c      M         Tom     92
a      M      Li Lei     95
b      F  Han Meimei     98
d      0           0      0
[Finished in 4.4s]

还有一种方法是使用method指定填充方法,比如ffill,这样可以按照差值的方法对NaN进行填充。
代码如下:

DF_Data = DF_Data.reindex(reindex_list,methoed = 'ffill')

输出的结构如下:

  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
  gender     student  score
c      M         Tom     92
a      M      Li Lei     95
b      F  Han Meimei     98
d      M         Tom     92
[Finished in 4.8s]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值