玩具示例代碼假設我有以下內容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個贊
我會做什么:
檢查每個元素是否為空/不為空
每行跨列的累積總和
檢查
any
每一列、每一行使用該結果作為索引器:
df.loc[:, ~df.isna().cumsum(axis=1).any(axis=0)]
給我嗎:
A B
0 11 12
1 21 22
2 31 32

暮色呼如
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
提交
取消