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



>我有一个这样的数据帧:

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]}

我想要的是:

  1. 删除所有nan- 包括除col4之外的列
  2. 获取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。

假设您可以对包含 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

我在这里假设你已经用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()

相关内容

  • 没有找到相关文章

最新更新