时间:2021-05-22
在最新版的pandas中(不知道之前的版本有没有这个问题),当我们对具有多层次索引的对象做切片或者通过df[bool_list]的方式索引的时候,得到的新的对象尽管实际索引已经发生了改变,但是当直接使用df_new.index调取新对象的MultiIndex对象的时候,这个MultiIndex对象还是和原对象的索引保持一致的,而不是和新对象的实际索引保持一致。这点需要特别注意,因为正常情况下,我们自然会认为df.index的MultiIndex对象和df的实际索引是一致的,基于此,我们可能会写出一些难以发现的bug。可以看下面的例子。
import pandas as pd df_t1=pd.DataFrame([[1,2],[2,3],[2,3],[3,5]],index=[['a','a','b','b'],[0,1,0,1]]) df_t1Out[39]: 0 1a 0 1 2 1 2 3b 0 2 3 1 3 5 df_t2=df_t1.loc[[x=='a' for x in df_t1.index.levels[0]]] df_t2 Out[41]: 0 1a 0 1 2 df_t2.index #从上面df_t2对象的输出结果和下面index的输出结果可以发现,df_t2的index和其实际的索引并不一致Out[42]: MultiIndex(levels=[['a', 'b'], [0, 1]], codes=[[0], [0]]) df_t3=df_t1.iloc[:2,:] df_t3Out[46]: 0 1a 0 1 2 1 2 3 df_t3.index #从上面df_t3对象的输出结果和下面index的输出结果可以发现,df_t3的index和其实际的索引也不一致Out[47]: MultiIndex(levels=[['a', 'b'], [0, 1]], codes=[[0, 0], [0, 1]])从上面的例子可以看出,当通过bool索引和切片索引时,就会出现这种问题,其他的索引方式一般不会出现这种问题。当遇到这种问题时,如果我们需要始终保持新对象的index得到的对象和实际索引一致,该如何做呢?请看下面代码
df_t2.index.remove_unused_levels()Out[62]: MultiIndex(levels=[['a'], [0]], codes=[[0], [0]]) df_t2.index=df_t2.index.remove_unused_levels() df_t2.indexOut[75]: MultiIndex(levels=[['a'], [0]], codes=[[0], [0]]) df_t2Out[76]: 0 1a 0 1 2可以看到,MultiIndex对象有一个remove_unused_levels()函数,其作用是把没有被使用的索引被去处掉,这样就可以使得对象的MultiIndex对象和其实际显示出来的索引保持一致了。故其实在遇到多层次索引的切片索引或者bool索引之后,加上一条df.index.remove_unused_levels()语句不失为一个好的习惯,或者至少得有这种意识,意识到此处可能会出现这种问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
问题:输出新建的DataFrame对象时,DataFrame中各列的显示顺序和DataFrame定义中的顺序不一致。例如:importpandasaspdgra
如果很多商品的说明不一致怎么办?商品说明不一致可能是业者们经常遇到的。今天我们以很多为例,谈谈商品说明不一致该怎么办一、拼音多的商品说明不一致的.1、标志类说明
造成这个错误主要有3个可能的原因:context上下文不一致library和name不一致生成的dll文件没加入到html文件中dll.config.jsmod
动机一些bug由于本地环境和线上环境的不一致可能导致本地无法复现本地依赖和线上依赖版本不一致也可以导致一些问题有时一些bug跟数据相关,本地数据无法和线上数据一
12月6日消息,淘宝规则发布《淘宝规则》中“品牌不一致”相关规则变更公示通知,调整滥发信息违规处理等内容,并且新增《品牌不一致的认定和处罚的规则与实施细则》,以