Python 如果组包含空列,则删除行
我的数据框中有多行和一个名为“name”的列 我想按“名称”分组并删除组中的每个项目,如果任何行有空列(nan、none或空字符串) 我怎样才能做到这一点 输入 输出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 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])
进行测试/检查。