删除/"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 …
或类似的东西替换它这个?
我认为一种可能的解决方案是 droplevel
s 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
如果您只需要重置列名,请使用 shape
和 range
:
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
我有一个大数据帧,我从不同的数据帧中拼接而成。
它由不同数据类型的时间序列构建而成,看起来像这样:
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 …
或类似的东西替换它这个?
我认为一种可能的解决方案是 droplevel
s 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
如果您只需要重置列名,请使用 shape
和 range
:
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