我有一个python pandas DataFrame看起来像这样:
A B C ... ZZ
2008-01-01 00 NaN NaN NaN ... 1
2008-01-02 00 NaN NaN NaN ... NaN
2008-01-03 00 NaN NaN 1 ... NaN
... ... ... ... ... ...
2012-12-31 00 NaN 1 NaN ... NaN
我无法弄清楚如何获得DataFrame的子集,其中有一个或多个’1′,所以最终的df应该是这样的:
B C ... ZZ
2008-01-01 00 NaN NaN ... 1
2008-01-03 00 NaN 1 ... NaN
... ... ... ... ...
2012-12-31 00 1 NaN ... NaN
这样就删除了所有没有1的行和列.
我尝试这似乎删除没有1的行:
df_filtered = df[df.sum(1)>0]
并尝试删除列:
df_filtered = df_filtered[df.sum(0)>0]
但在第二行之后得到此错误:
IndexingError('Unalignable boolean Series key provided')
解决方法:
用loc做:
In [90]: df
Out[90]:
0 1 2 3 4 5
0 1 NaN NaN 1 1 NaN
1 NaN NaN NaN NaN NaN NaN
2 1 1 NaN NaN 1 NaN
3 1 NaN 1 1 NaN NaN
4 NaN NaN NaN NaN NaN NaN
In [91]: df.loc[df.sum(1) > 0, df.sum(0) > 0]
Out[91]:
0 1 2 3 4
0 1 NaN NaN 1 1
2 1 1 NaN NaN 1
3 1 NaN 1 1 NaN
这就是你得到这个错误的原因:
假设我有以下框架,df,(与你的相似):
In [112]: df
Out[112]:
a b c d e
0 0 1 1 NaN 1
1 NaN NaN NaN NaN NaN
2 0 0 0 NaN 0
3 0 0 1 NaN 1
4 1 1 1 NaN 1
5 0 0 0 NaN 0
6 1 0 1 NaN 0
当我沿着行和阈值总和为0时,我得到:
In [113]: row_sum = df.sum()
In [114]: row_sum > 0
Out[114]:
a True
b True
c True
d False
e True
dtype: bool
由于row_sum的索引是df的列,因此在这种情况下尝试使用row_sum>的值是没有意义的. 0到fancy-index到df行,因为它们的行索引没有对齐而且它们不能对齐.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。