获取特定列中具有空值的数据并删除其他空列

我有一个这样的数据框:


rawdata = {'col1': [3 ,nan ,4 ,7 ,nan ,5], 

'col2': [10 ,20 ,10 ,30 ,10 ,40], 

'col3': [23 ,34 ,45 ,56 ,34 ,23], 

'col4': [5 ,4 ,nan ,5 ,1 ,nan], 

'col5': [28 ,33 ,33 ,4 ,nan ,44]}

我想要的是:


删除nan除 from 之外的所有-include 列col4

获取数据,其中col4为nan

最终,我需要有以下内容:


target = {'col2': [10 ,40],

'col3': [45 ,23], 

'col4': [nan ,nan]}

这是代码:


rawdata.drop(["col1", "col5"], axis = 1, inplace= True)

rawdata = rawdata[rawdata.isnull().any(axis=1)][rawdata .columns[rawdata .isnull().any()]]

但是,这仅返回 col4 本身。我也需要 col2 和 col3。


largeQ
浏览 194回答 2
2回答

慕村9548890

假设您可以对包含 nan 的列进行硬编码(正如您自己的示例所表明的那样),这可以归结为df.drop(['col1', 'col5'], axis=1)[df.col4.isna()]. 使用您的测试数据:In [13]: dfOut[13]:   col1  col2  col3  col4  col50   3.0    10    23   5.0  28.01   NaN    20    34   4.0  33.02   4.0    10    45   NaN  33.03   7.0    30    56   5.0   4.04   NaN    10    34   1.0   NaN5   5.0    40    23   NaN  44.0In [14]: df.drop(['col1', 'col5'], axis=1)[df.col4.isna()]Out[14]:   col2  col3  col42    10    45   NaN5    40    23   NaN如果您不想对这些列进行硬编码,另一种方法是In [35]: df.drop(df.columns[df.isna().any()].difference({'col4'}), axis=1)[df.col4.isna()]Out[35]:   col2  col3  col42    10    45   NaN5    40    23   NaN

慕后森

我在这里假设您已经构建了一个数据框 df = pd.DataFrame(rawdata)我将首先构建一个包含要保留的列的系列:keep = df.count() == len(df)deep['col4'] = True那么你想要的只是:df.loc[df.col4.isna(), keep]正如预期的那样:   col2  col3  col42    10    45   NaN5    40    23   NaN如果你想要一个字典,它只是 df.loc[df.col4.isna(), keep].to_dict()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python