删除基于唯一值和nan值的样本

2024-04-28 20:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个数据框:

   dtf:
       id   f1    f2   f3    f4     f5
       t1   34    12    5    nan    6
       t1   nan    4    2    9      7
       t1   34    nan   5    nan    6
       t2   nan   nan  nan   nan   nan    
       t2   nan   nan  nan   nan   nan    
       t2   nan   nan  nan   nan   nan
       t3   23     7    8     1     32    
       t3   12     3   nan    45    56    
       t3   nan   nan  nan   nan    nan    

我想删除那些行(具有唯一id),所有特性的值都是“nan”(如t2)。因此,我想要的数据帧应该如下所示:

  dtf_new:
       id   f1    f2   f3    f4     f5
       t1   34    12    5    nan    6
       t1   nan    4    2    9      7
       t1   34    nan   5    nan    6           
       t3   23     7    8     1     32    
       t3   12     3   nan    45    56    
       t3   nan   nan  nan   nan    nan

我尝试使用下面的代码将其转换为字典,然后尝试查找nan值。但我仍然找不到正确的解决办法

 dict=dict(enumerate(dtf.id.unique()))   

Tags: 数据idnew特性nanf5dictf2
2条回答

@sacse是对的,dropna负责

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html

只需更改默认的“how”参数

这些类型的处理需求是基本的,对大多数用户来说都很常见。。。您可以假设它有一个功能,文档上只需几分钟,您就会找到您的答案和其他有趣的功能:)

值得一读

您可以执行groupbyisna

>>> dtf
   id    f1    f2   f3    f4    f5
0  t1  34.0  12.0  5.0   NaN   6.0
1  t1   NaN   4.0  2.0   9.0   7.0
2  t1  34.0   NaN  5.0   NaN   6.0
3  t2   NaN   NaN  NaN   NaN   NaN
4  t2   NaN   NaN  NaN   NaN   NaN
5  t2   NaN   NaN  NaN   NaN   NaN
6  t3  23.0   7.0  8.0   1.0  32.0
7  t3  12.0   3.0  NaN  45.0  56.0
8  t3   NaN   NaN  NaN   NaN   NaN
>>> dtf_new = dtf[~dtf['id'].map(dtf.groupby('id').apply(lambda x: x.drop(columns='id').isna().all(axis=None)))]
>>> dtf_new
   id    f1    f2   f3    f4    f5
0  t1  34.0  12.0  5.0   NaN   6.0
1  t1   NaN   4.0  2.0   9.0   7.0
2  t1  34.0   NaN  5.0   NaN   6.0
6  t3  23.0   7.0  8.0   1.0  32.0
7  t3  12.0   3.0  NaN  45.0  56.0
8  t3   NaN   NaN  NaN   NaN   NaN

相关问题 更多 >