繁体   English   中英

如何过滤Pandas Dataframe忽略空列

[英]How To Filter Pandas Dataframe Ignoring Null Columns

假设我有以下数据帧:

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

如何过滤数据框以显示包含匹配的非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   

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

你可以先在axis=1上的dropna()去掉过滤器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

假设filtcol是您的过滤器(具有一行的数据帧)并且df是您的起始数据帧,请执行以下操作:

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

cols是一个索引,包含过滤器中值不是NaN的列的名称。
通过选择原始数据帧中的col列值都不是NaN的行来获得ddf

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM