[英]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.