为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

largeQ 2021-12-21 10:58:40
我有一个这样的数据框: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。
查看完整描述

2 回答

?
慕村9548890

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


查看完整回答
反对 回复 2021-12-21
?
慕后森

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()


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号