ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – pandas DataFrame按行和列过滤

2019-08-31 12:58:23  阅读:182  来源: 互联网

标签:python pandas dataframe


我有一个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行,因为它们的行索引没有对齐而且它们不能对齐.

标签:python,pandas,dataframe
来源: https://codeday.me/bug/20190831/1775909.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有