删除/"Repairing" pandas 中的一个多索引

Removing/"Repairing" a multiindex in pandas

我有一个大数据帧,我从不同的数据帧中拼接而成。

它由不同数据类型的时间序列构建而成,看起来像这样:

location                       locname1                     locname2
region                          region1                      region1   
HZB                              314732                       309906   
LatLon                            xx;yy                        xx;yy 
1940-01-01                          NaN                          NaN   
1940-02-01                          NaN                          NaN   
1940-03-01                          NaN                          NaN   
1940-04-01                          NaN                          NaN   
1940-05-01                          NaN                          NaN   

但是我开始使用的一些数据帧在它们的索引中也有一个 datatype 行,当我连接它们时它似乎丢失了。

这显然表明我并没有真正理解 pandas 多索引,而且我承认,pandas 对待索引的方式与我习惯的完全不同,而且我凭直觉对待它们的方式完全不同令我困惑,但我的理解似乎足以满足我需要做的事情。

大多数情况下,就是这样。当我尝试绘制整个数据框时,我得到了 KeyError: 'Key length (5) was greater than MultiIndex lexsort depth (0)'.

现在,为了寻找那个错误,我 find various "solutions",它们都只影响我的日期列,但忽略了索引行。

所以,除了最终尝试了解多索引之外,是否有一种 df.get_rid_of_my_multiindex() 的东西,我可以简单地删除我的多索引,或者只是用 number 1 2 3 … 或类似的东西替换它这个?

我认为一种可能的解决方案是 droplevels of Multiindex in columns:

print df
     location locname1 locname2
       region  region1  region1
          HZB   314732   309906
       LatLon    xx;yy    xx;yy
0  1940-01-01      NaN      NaN
1  1940-02-01      NaN      NaN
2  1940-03-01      NaN      NaN
3  1940-04-01      NaN      NaN
4  1940-05-01      NaN      NaN

df.columns = df.columns.droplevel([1,2,3])
print df
     location  locname1  locname2
0  1940-01-01       NaN       NaN
1  1940-02-01       NaN       NaN
2  1940-03-01       NaN       NaN
3  1940-04-01       NaN       NaN
4  1940-05-01       NaN       NaN

如果您只需要重置列名,请使用 shaperange:

df.columns = range(df.shape[1])
print df
            0   1   2
0  1940-01-01 NaN NaN
1  1940-02-01 NaN NaN
2  1940-03-01 NaN NaN
3  1940-04-01 NaN NaN
4  1940-05-01 NaN NaN