玩具示例代碼假設(shè)我有以下內(nèi)容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預(yù)期產(chǎn)出nan但是我期望的是在找到值后刪除所有列。在玩具示例代碼中,預(yù)期輸出為: A B0 11 121 21 222 31 32問題nan在 a 的任何行中找到a 后,如何刪除所有列pandas DataFrame ?
2 回答

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
我會(huì)做什么:
檢查每個(gè)元素是否為空/不為空
每行跨列的累積總和
檢查
any
每一列、每一行使用該結(jié)果作為索引器:
df.loc[:, ~df.isna().cumsum(axis=1).any(axis=0)]
給我嗎:
A B
0 11 12
1 21 22
2 31 32

暮色呼如
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
我可以找到一種方法來獲得預(yù)期的輸出:
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
添加回答
舉報(bào)
0/150
提交
取消