我有一个类似于这个的DataFrame
A M DM BYN Z
2015-01-02 3. 7. NaN 2. 8.
2015-01-03 1. NaN 2. 8. 3.
...
2016-06-14 3. 1. 7. NaN 2.
2016-06-15 1. NaN 2. 8. 3.
我的实际 DataFrame 包含 500 多列和一年多的历史记录。
我愿意:
- 删除最后一行包含 NaN 的列
- 或者,删除最后 5 行中至少有 NaN 的列
我能够识别包含 NaN 的列:
df.isnull().sum(axis=0)
但在上述情况下我无法删除列。
有人可以帮忙吗?
请您参考如下方法:
pandas 有一个专门针对这个 dropna 的方法:
In [21]: df.dropna(axis=1, how='any')
Out[21]:
A Z
2015-01-02 3.0 8.0
2015-01-03 1.0 3.0
2016-06-14 3.0 2.0
2016-06-15 1.0 3.0
您可以使用 ~(不是)any :
In [11]: df.loc[:, ~df.isnull().any()]
Out[11]:
A Z
2015-01-02 3.0 8.0
2015-01-03 1.0 3.0
2016-06-14 3.0 2.0
2016-06-15 1.0 3.0
虽然写成 all notnull 可能更好:
In [12]: df.loc[:, df.notnull().all()]
Out[12]:
A Z
2015-01-02 3.0 8.0
2015-01-03 1.0 3.0
2016-06-14 3.0 2.0
2016-06-15 1.0 3.0
drop the columns where there is at least a NaN in the last 5 rows
您可以在 DataFrame 的最后一行 (tail) 上使用它:
df.loc[:, df.tail(5).notnull().all()]
