Skip to main content
 首页 » 编程设计

python之删除包含 NaN 的列

2025年05月04日17zhenyulu

我有一个类似于这个的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 多列和一年多的历史记录。

我愿意:

  1. 删除最后一行包含 NaN 的列
  2. 或者,删除最后 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()]