Python 如果组包含空列,则删除行

Python 如果组包含空列,则删除行,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我的数据框中有多行和一个名为“name”的列 我想按“名称”分组并删除组中的每个项目,如果任何行有空列(nan、none或空字符串) 我怎样才能做到这一点 输入 输出 name c0 c1 c2 273142 OMN 1 1 1 256278 OMN 1 1 1 您可以使用过滤器,检查组中是否存在空值(“”),并在该条件下进行过滤: import pandas as pd df.groupby('name').filter(lamb

我的数据框中有多行和一个名为“name”的列

我想按“名称”分组并删除组中的每个项目,如果任何行有空列(nan、none或空字符串)

我怎样才能做到这一点

输入

输出

       name    c0  c1  c2
273142    OMN    1  1   1
256278    OMN    1  1   1

您可以使用
过滤器
,检查组中是否存在空值(
“”
),并在该条件下进行过滤:

import pandas as pd

df.groupby('name').filter(lambda x: (x != "").all().all())
print ((df.iloc[:, 1:] == ''))
           c0     c1     c2
193556  False   True   True
273142  False  False  False
256278  False  False  False
41165   False  False  False
339649  False  False  False

为了获得更好的性能,请不要使用
groupby
,更好的方法是按条件获取所有名称并按以下方式进行筛选:

如果空值为
NaN
,则只需将
=''
更改为
.isnull()

详细信息

按条件检查没有第一列的所有值:

import pandas as pd

df.groupby('name').filter(lambda x: (x != "").all().all())
print ((df.iloc[:, 1:] == ''))
           c0     c1     c2
193556  False   True   True
273142  False  False  False
256278  False  False  False
41165   False  False  False
339649  False  False  False
使用
any
,检查每列是否至少有一个
True

print ((df.iloc[:, 1:] == '').any(axis=1))
193556     True
273142    False
256278    False
41165     False
339649    False
dtype: bool
通过筛选列
name
获取名称:

print (df.loc[(df.iloc[:, 1:] == '').any(axis=1), 'name'])
193556    INFO
Name: name, dtype: object

你能添加数据作为例子吗?刚刚添加,还有什么让我知道的。请定义“空”。这是一个空字符串、
None
NaN
,还是其他内容?如果
c1
中的第一项为空,可以通过查看
类型(df['c1'].iloc[0])
进行测试/检查。