【问题标题】:Removing/"Repairing" a multiindex in pandas删除/“修复”熊猫中的多索引
【发布时间】:2016-03-31 20:07:14
【问题描述】:

我有一个大数据框,我从不同的数据框中拼接出来。

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

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)'

现在,寻找那个错误,我findvarious“解决方案”,这些都只会影响我的日期列,但忽略索引行。

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

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    我认为一种可能的解决方案是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
    

    【讨论】:

    • 还有另外一个 pandas 具有我正在寻找的功能的东西,但我只是找不到它......而且df.columns = df.columns.droplevel([1,2,3]) 变体特别好,因为这很容易让我保持我的location,这是一个很好的、唯一的情节标识符。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2016-06-23
    • 2018-01-02
    • 2015-06-28
    相关资源
    最近更新 更多