Python 如何过滤忽略空列的数据帧

Python 如何过滤忽略空列的数据帧,python,pandas,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 如何筛选数据框以显示包含匹配的非nan值的所有

假设我有以下数据帧:

     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值的所有行

您可以首先在轴=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


如何筛选数据帧以显示包含匹配非nan值的所有行

您可以首先在轴=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



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

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

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

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

你用的过滤器是什么?我不太清楚过滤器到底是怎么回事,您的筛选器是否表示要从相应的列中选择所有“N”“2”“15”“N”?还是仅当该行在列中至少包含其中一个值?您应用的筛选器是什么?我不太确定筛选器发生了什么情况,您的筛选器是否表示要从相应的列中选择所有“N”“2”“15”“N”?还是仅当该行在列中至少包含其中一个值时?谢谢,这也适用。我喜欢
final=df.merge(f.dropna(1))的简单性
谢谢,这也很有效。我喜欢
final=df.merge(f.dropna(1))