8、pandas 的 行、列重排序 reindex()

行、列重排序经常需要使用到。

现在有一个DataFrame:

8、pandas 的 行、列重排序 reindex()_第1张图片
数据源

现在DataFrame的索引是默认索引,从0开头的。之前的文章里,我讲过用set_index()将某一列设为索引。我就把‘序号’这一列设置为索引。

8、pandas 的 行、列重排序 reindex()_第2张图片
设置序列为索引

set_index()是重新设置一个索引。

而reindex()是将现有的行或者列调整顺序,这是两者的区别。

8、pandas 的 行、列重排序 reindex()_第3张图片
行重新排序
8、pandas 的 行、列重排序 reindex()_第4张图片
列重新排序

如果在新的索引名或者列名中,出现新的值,会发生添加新的行或者列,里面全是空值,而没有选中的行或者列就不会出现。

8、pandas 的 行、列重排序 reindex()_第5张图片
行列出现新值

所以如果在添加新行或列时,设置fill_value就可以将空值填充。

8、pandas 的 行、列重排序 reindex()_第6张图片
用fill_value填充空值

这里的reindex()可以给DataFrame添加新的行和列,之前讲过的loc[]也可以添加。但是reindex()需要将所有的行索引或者列名全部表示出来,所以便利性不如loc[]。但是如果添加行列较多,而且需要根据上下文填充空值的时候,reindex()就方便一些了。

8、pandas 的 行、列重排序 reindex()_第7张图片
数据源
8、pandas 的 行、列重排序 reindex()_第8张图片
空值索引
8、pandas 的 行、列重排序 reindex()_第9张图片
使用bfill函数填充
8、pandas 的 行、列重排序 reindex()_第10张图片
使用ffill函数

method='bfill'可以根据后面一个值进行填充,而method=’ffill'则是根据前面一个值进行填充。

bfill可以理解为‘back fill',  'ffill'可以理解为’front fill'。

但是这个参数使用有个条件:索引应该是升序或者降序的,如果索引顺序是乱的就会报错。

你可能感兴趣的:(8、pandas 的 行、列重排序 reindex())