暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python reindex详解

EE漫谈 2019-07-04
388

 

首先介绍reindex,它的作用是创建一个新对象,新对象的数据符合新的索引。示例如下所示

 

从上图可以看出,使用reindex后,索引进行了重排。如果某个索引值不存在,就会引入缺失值:

 

如果不想使用缺失值,可以通过fill_value参数填充默认值,如下所示

 

同时也可以使用method选项,使用method时,可用的参数包括ffill(前向填充)和bfill(后向填充)。

在使用method选项时,你可能会发现ffill或bfill填充的值与预期的值不符,如下图所示:

 

本来认为‘o’索引填充的值应该是3,但上面填充的却是4,这是为什么呢?

因为在reindex的括号内部使用method选项时:先按照索引的顺序排序好,然后再填充值,填充完成后再按照reindex里新索引的顺序进行排列。

因此obj先按照a,b,c,d,o的顺序排列好,d的值是4, o的值就被前向填充成4了。

同理,如果使用bfill参数,因为o后面没有值了,o的值就是NaN,而不是2。如下图所示

 

但是如果使用.ffill()或.bfill(),就能够达到我们想要的效果:填充值与前向/后项值相同。如下图所示:

 

 

同时需要注意的是,在使用method选项时,原数组里的索引必须是已经经过排序的,如果原索引是乱序的,会弹出如下错误

index must be monotonic increasing or decreasing

如下所示obj3的原索引未按顺序排列:

 

如果此时使用method选项,就会报错:

 

 

但使用.ffill()就不会有问题:

 

使用method方式是旧python的做法,新版python中推荐使用.ffill()方式。

通过reindex还可以选择特定的索引:

 

对于DataFrame,reindex可以修改行索引或列索引。如果只传递一个序列,则会修改行索引:

 

 

用columns关键字就可以重新索引列了


 

通过本文的学习,你是否学会了reindex的用法?


文章转载自EE漫谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论