2 回答

TA贡献1884条经验 获得超4个赞
假设您可以对包含 nan 的列进行硬编码(正如您自己的示例所表明的那样),这可以归结为df.drop(['col1', 'col5'], axis=1)[df.col4.isna()]. 使用您的测试数据:
In [13]: df
Out[13]:
col1 col2 col3 col4 col5
0 3.0 10 23 5.0 28.0
1 NaN 20 34 4.0 33.0
2 4.0 10 45 NaN 33.0
3 7.0 30 56 5.0 4.0
4 NaN 10 34 1.0 NaN
5 5.0 40 23 NaN 44.0
In [14]: df.drop(['col1', 'col5'], axis=1)[df.col4.isna()]
Out[14]:
col2 col3 col4
2 10 45 NaN
5 40 23 NaN
如果您不想对这些列进行硬编码,另一种方法是
In [35]: df.drop(df.columns[df.isna().any()].difference({'col4'}), axis=1)[df.col4.isna()]
Out[35]:
col2 col3 col4
2 10 45 NaN
5 40 23 NaN

TA贡献1802条经验 获得超5个赞
我在这里假设您已经构建了一个数据框 df = pd.DataFrame(rawdata)
我将首先构建一个包含要保留的列的系列:
keep = df.count() == len(df)
deep['col4'] = True
那么你想要的只是:
df.loc[df.col4.isna(), keep]
正如预期的那样:
col2 col3 col4
2 10 45 NaN
5 40 23 NaN
如果你想要一个字典,它只是 df.loc[df.col4.isna(), keep].to_dict()
添加回答
举报