3

次のような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

そして、1つ以上の「1」が含まれるDataFrameのサブセットを取得する方法がわからないため、最終的な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]

しかし、2行目の後にこのエラーが発生します:

IndexingError('Unalignable boolean Series key provided')
4

2 に答える 2

5

でそれを行う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

のは のでindexあるため、この場合、 の行に の ファンシー インデックスの値を使用しようとしても意味がありません。これらの行のインデックスは整列されておらず、整列することもできないからです。row_sumcolumnsdfrow_sum > 0df

于 2013-10-06T18:26:05.213 に答える
0

NaNまたは、すべての行または列を削除することもでき.any()ます。

In [1680]: df
Out[1680]:
     0    1    2    3    4   5
0  1.0  NaN  NaN  1.0  1.0 NaN
1  NaN  NaN  NaN  NaN  NaN NaN
2  1.0  1.0  NaN  NaN  1.0 NaN
3  1.0  NaN  1.0  1.0  NaN NaN
4  NaN  NaN  NaN  NaN  NaN NaN

In [1681]: df.loc[df.any(axis=1), df.any(axis=0)]
Out[1681]:
     0    1    2    3    4
0  1.0  NaN  NaN  1.0  1.0
2  1.0  1.0  NaN  NaN  1.0
3  1.0  NaN  1.0  1.0  NaN
于 2017-08-09T20:15:20.210 に答える