为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python pandas dataframe中任何行具有NaN值后删除列

如何在Python pandas dataframe中任何行具有NaN值后删除列

狐的传说 2023-10-25 10:46:11
玩具示例代码假设我有以下内容DataFrame:import pandas as pdimport numpy as npdf = pd.DataFrame({"A":[11,21,31], "B":[12,22,32], "C":[np.nan,23,33], "D":[np.nan,24,34], "E":[15,25,35]})这将返回:>>> df    A   B     C     D   E0  11  12   NaN   NaN  151  21  22  23.0  24.0  252  31  32  33.0  34.0  35删除所有具有nan值的列我知道如何删除所有具有nan如下值的行的列:out1 = df.dropna(axis=1, how="any")返回:>>> out1    A   B   E0  11  12  151  21  22  252  31  32  35预期产出nan但是我期望的是在找到值后删除所有列。在玩具示例代码中,预期输出为:    A   B0  11  121  21  222  31  32问题nan在 a 的任何行中找到a 后,如何删除所有列pandas DataFrame ?
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

我会做什么:

  1. 检查每个元素是否为空/不为空

  2. 每行跨列的累积总和

  3. 检查any每一列、每一行

  4. 使用该结果作为索引器:

df.loc[:, ~df.isna().cumsum(axis=1).any(axis=0)]

给我吗:

    A   B

0  11  12

1  21  22

2  31  32


查看完整回答
反对 回复 2023-10-25
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我可以找到一种方法来获得预期的输出:


colFirstNaN = df.isna().any(axis=0).idxmax() # Find column that has first NaN element in any row

indexColLastValue = df.columns.tolist().index(colFirstNaN) -1

ColLastValue = df.columns[indexColLastValue]

out2 = df.loc[:, :ColLastValue]

那么输出将是:


>>> out2

    A   B

0  11  12

1  21  22

2  31  32


查看完整回答
反对 回复 2023-10-25
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信