玩具示例代码假设我有以下内容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 回答
![?](http://img1.sycdn.imooc.com/5333a1920001d36402200220-100-100.jpg)
绝地无双
TA贡献1946条经验 获得超4个赞
我会做什么:
检查每个元素是否为空/不为空
每行跨列的累积总和
检查
any
每一列、每一行使用该结果作为索引器:
df.loc[:, ~df.isna().cumsum(axis=1).any(axis=0)]
给我吗:
A B
0 11 12
1 21 22
2 31 32
![?](http://img1.sycdn.imooc.com/53339fdf00019de902200220-100-100.jpg)
暮色呼如
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
添加回答
举报
0/150
提交
取消