在Python中,如何使用特定字符串过滤出多个列
我是python新手,尤其是熊猫,所以我真的不知道自己在做什么。我有10列100000行和4个字母字符串。我需要过滤掉所有列/行中不包含“DDD”的行 我试着用iloc和loc来做,但不起作用:在Python中,如何使用特定字符串过滤出多个列,python,pandas,Python,Pandas,我是python新手,尤其是熊猫,所以我真的不知道自己在做什么。我有10列100000行和4个字母字符串。我需要过滤掉所有列/行中不包含“DDD”的行 我试着用iloc和loc来做,但不起作用: 将熊猫作为pd导入 df=pd.read\u csv(“data\u 3.csv”,分隔符='!')) df.iloc[:,10:20].str.contains('DDD',regex=False,na=False) df.head() 它返回一个错误:“DataFrame”对象没有可以使用的属性“
将熊猫作为pd导入
df=pd.read\u csv(“data\u 3.csv”,分隔符='!'))
df.iloc[:,10:20].str.contains('DDD',regex=False,na=False)
df.head()
它返回一个错误:“DataFrame”对象没有可以使用的属性“str”,但只能在序列上使用,不能在DataFrames上使用。因此,为了使用它,我们逐个查看每一列(这是一个系列),查看它们的循环:
>>将熊猫作为pd导入
>>>df=pd.DataFrame([['DDDA','DDDB','DDDC','dddddd'],
['DDDE','DDDF','DDDG','DHDD'],
['DDDI','DDDJ','DDDK','DDDL'],
['DMDD','DNDN','DDOD','DDDP']],
列=['A'、'B'、'C'、'D'])
>>>对于df.columns中的列:
df=df[df[column].str.contains('DDD')]
在for循环中,我们使用df
覆盖数据帧df
,其中列包含“DDD”。通过在每一列上循环,我们将删除该列中不包含“DDD”的行,直到我们查看了所有列,只在每一列中保留包含“DDD”的行
这将为您提供:
打印(df)
A、B、C、D
0 DDDA DDDB DDDC DDDD
2 DDDI DDDJ DDDK DDDL
由于您只在10列上循环,因此速度不应该太慢
编辑:您可能应该在不使用for循环的情况下进行操作,正如所解释的,因为它可能会更快,但我将把它保留下来,因为在不了解lambda函数的情况下更容易理解。我建议在不使用
for
循环的情况下进行操作,如下所示:
df[df.apply(lambda x: x.str.contains('DDD')).all(axis=1)]
仅选择字符串列的步骤
df[df.select_dtypes(include='object').apply(lambda x: x.str.contains('DDD')).all(axis=1)]
selected_cols = ['A','B']
df[df[selected_cols].apply(lambda x: x.str.contains('DDD')).all(axis=1)]
仅选择某些字符串列的步骤
df[df.select_dtypes(include='object').apply(lambda x: x.str.contains('DDD')).all(axis=1)]
selected_cols = ['A','B']
df[df[selected_cols].apply(lambda x: x.str.contains('DDD')).all(axis=1)]
您可以这样做,但如果您的所有列类型都是StringType:
for column in foo.columns:
df = df[~df[c].str.contains('DDD')]
我还有另外10列,其中包含各种值,我认为通过使用df.drop删除它们不会引起任何问题,但事实并非如此。我是否可以仅应用于带字符串的那10列?它只返回列名,不返回值,如果在末尾添加
df
,它将返回原始的未修改的数据帧您可以检查数据类型?检查它们是否是对象?它在下面的@Aris示例帧上测试得很好。此外,如果您想添加df,这不会修改您的原始df=