假设我具有以下数据框:
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
答案 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