删除包含NaN的列

2024-10-03 15:25:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个和这个类似的数据帧

             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.

我的实际数据帧包含500多个列和一年多的历史。在

我想:

  1. 删除最后一行包含NaN的列
  2. 或者,删除最后5行中至少有一个NaN的列

我能够识别包含NaN的列:

^{2}$

但我无法删除上述案例中的专栏。在

有人能帮忙吗?在


Tags: 数据dm历史nan案例专栏byn
2条回答

pandas有一个方法来处理这个^{}

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

您可以使用~(not)^{}

^{pr2}$

也许最好写为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的最后一行(^{})上使用:

df.loc[:, df.tail(5).notnull().all()]

要只保留最后一行没有丢失值的列(即删除那些丢失的值),可以使用反的.isnull()(或.notnull())在列上创建一个^{}):

df.loc[:, ~df.iloc[-1].isnull()]
df.loc[:, df.iloc[-1].notnull()]

仅使用示例数据的前两行:

^{pr2}$

对于最后五行,只保留没有至少一个nan值的列,您将添加.any()或{},具体取决于您是使用.isnull()还是{}:

df.loc[:, ~df.iloc[-5:].isnull().any()]
df.loc[:, df.iloc[-5:].notnull().all()]

相关问题 更多 >