如何过滤忽略空列的熊猫数据框

时间:2019-08-25 12:52:11

标签: python pandas

假设我具有以下数据框:

     col1    col2    col3    col4
0    8       2       nan     nan               
1    nan     2       15      nan            
2    nan     2       15      4           
3    3       2       15      nan            

如何过滤数据框以显示包含匹配的 non-nan 值的所有行?例如,如果我应用了以下过滤器...

     col1    col2    col3    col4             
0    nan     2       15      nan          

...所需的输出应为:

     col1    col2    col3    col4             
0    nan     2       15      nan            
1    nan     2       15      4           
2    3       2       15      nan   

2 个答案:

答案 0 :(得分:2)

  

如何过滤数据框以显示包含匹配的非南值的所有行

您可以首先在dropna()axis=1除去在过滤器df中具有NaN的列。然后合并;

print(df)
print('\n')
print(f)

   col1  col2  col3  col4
0   8.0     2   NaN   NaN
1   NaN     2  15.0   NaN
2   NaN     2  15.0   4.0
3   3.0     2  15.0   NaN


   col1  col2  col3  col4
0   NaN     2    15   NaN

final=df.merge(f.dropna(1))

   col1  col2  col3  col4
0   NaN     2  15.0   NaN
1   NaN     2  15.0   4.0
2   3.0     2  15.0   NaN

答案 1 :(得分:1)

假设filtcol是您的过滤器(一个数据行包含一行),而df是您的起始数据帧,请执行以下操作:

cols = filtcol.dropna(1).columns
ddf = df.loc[~df[cols].isna().any(axis=1)]

cols是一个索引,用于保存过滤器中其值不是NaN的列的名称。
通过选择原始数据框中的ddf列值都不是col的行来获得NaN

ddf是:

   col1  col2  col3  col4
1   NaN     2  15.0   NaN
2   NaN     2  15.0   4.0
3   3.0     2  15.0   NaN

请注意,此解决方案仅检查值是否为NaN。这意味着您的过滤器可以具有任何非NaN值,无需匹配数据框中的确切值。即使您使用过滤器,您也将获得相同的结果,例如:

   col1  col2  col3  col4
0   NaN     0     0   NaN