猿问

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

玩具示例代码

假设我有以下内容DataFrame:


import pandas as pd

import numpy as np

df = 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   E

0  11  12   NaN   NaN  15

1  21  22  23.0  24.0  25

2  31  32  33.0  34.0  35

删除所有具有nan值的列

我知道如何删除所有具有nan如下值的行的列:


out1 = df.dropna(axis=1, how="any")

返回:


>>> out1

    A   B   E

0  11  12  15

1  21  22  25

2  31  32  35

预期产出

nan但是我期望的是在找到值后删除所有列。在玩具示例代码中,预期输出为:


    A   B

0  11  12

1  21  22

2  31  32

问题

nan在 a 的任何行中找到a 后,如何删除所有列pandas DataFrame ?


狐的传说
浏览 114回答 2
2回答

绝地无双

我会做什么:检查每个元素是否为空/不为空每行跨列的累积总和检查any每一列、每一行使用该结果作为索引器:df.loc[:, ~df.isna().cumsum(axis=1).any(axis=0)]给我吗:    A   B0  11  121  21  222  31  32

暮色呼如

我可以找到一种方法来获得预期的输出:colFirstNaN = df.isna().any(axis=0).idxmax() # Find column that has first NaN element in any rowindexColLastValue = df.columns.tolist().index(colFirstNaN) -1ColLastValue = df.columns[indexColLastValue]out2 = df.loc[:, :ColLastValue]那么输出将是:>>> out2    A   B0  11  121  21  222  31  32
随时随地看视频慕课网APP

相关分类

Python
我要回答