为什么在这两种情况下pandas.MultiIndex.set_levels返回不同的输出?

问题描述

使用pandas.MultiIndex.set_levels()将(页眉)MultiIndex Level的类型从字符串更改为int时,我遇到一个奇怪的错误。基本上,set_levels()会无缘无故地更改所讨论级别的排序顺序(无需更改列顺序)。看来问题归结于理解以下两个set_levels()的简单用例的输出之间的差异。

情况1:没问题

# generate int multiindex
myIndex_str_ = pd.MultiIndex.from_product([range(2),range(24)])
# convert level 1 values to str
myIndex_str_ = myIndex_str_.set_levels(myIndex_str_.get_level_values(1).unique().map(str),level=1)
# convert back level 1 values to int
myIndex_int_ = myIndex_str_.set_levels(myIndex_str_.get_level_values(1).unique().map(int),level=1)

在第一种情况下,myIndex_int_中的级别值与myIndex_str_中的级别值递增。没问题。

Normally sorted MultiIndex

案例2:问题

# generate directly multiindex with str values for level 2
myIndex_str =  pd.MultiIndex.from_product([range(2),map(str,range(24))])
# convert level 1 values to int
myIndex_int = myIndex_str.set_levels(myIndex_str.get_level_values(1).unique().map(int),level=1)

在第二种情况下,myIndex_int中的级别值以与myIndex_str中不同的方式排序,既不是字母也不是数字升序:

enter image description here

myIndex_strmyIndex_str_myIndex_intmyIndex_int_进行比较,我得到以下输出,但我也不理解:

>> myIndex_str.equals(myIndex_str_)
True
>> myIndex_int.equals(myIndex_int_)
False

第一种方法是在此处解决该错误(如果有)的解决方案。 但是,当使用通过pd.read_csv()从.csv文件读取的数据帧并指定多个标题行时,我遇到了问题。因此,级别值将自动解释为字符串。之后尝试将此类型更改为int会返回与上面相同的混合级别。确切地说,只有级别值是混合的,不是列。

我不知道问题是从哪里来的,因此欢迎对原因或解决方法有任何想法!谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...