如何按字符串过滤熊猫数据框?

Posted

技术标签:

【中文标题】如何按字符串过滤熊猫数据框?【英文标题】:how to filter pandas dataframe by string? 【发布时间】:2018-06-09 18:11:57 【问题描述】:

我有一个 pandas 数据框,我想按列中的特定单词(测试)进行过滤。我试过了:

df[df[col].str.contains('test')]

但它返回一个空数据框,其中只有列名。对于输出,我正在寻找一个包含所有包含单词“test”的行的数据框。我能做些什么?

编辑(添加样本):

data = pd.read_csv(/...csv)

数据有5个列,包括'BusinessDescription',我想提取Business Description列中包含单词“dental”(不区分大小写)的所有行,所以我使用了:

filtered = data[data['BusinessDescription'].str.contains('dental')==True]

我得到一个空数据框,只有 5 个列的标题名称。

【问题讨论】:

你能添加一些数据样本吗?因为它应该工作得很好。 我刚刚编辑了原始帖子以包含更多细节! 对于未来的编程,我建议在引用数据帧时使用关键字df 而不是data。这是围绕 SO 使用该符号的常见方式。 【参考方案1】:

看来contains中需要参数flags

import re

filtered = data[data['BusinessDescription'].str.contains('dental', flags = re.IGNORECASE)]

另一个解决方案,谢谢 Anton vBR 是先转换为小写:

filtered = data[data['BusinessDescription'].str.lower().str.contains('dental')]

示例:对于未来的编程,我建议在引用数据帧时使用关键字 df 而不是 data。这是围绕 SO 使用该符号的常见方式。

import pandas as pd

data = dict(BusinessDescription=['dental fluss','DENTAL','Dentist'])
df = pd.DataFrame(data)
df[df['BusinessDescription'].str.lower().str.contains('dental')]

  BusinessDescription
0        dental fluss
1              DENTAL

时间安排

d = dict(BusinessDescription=['dental fluss','DENTAL','Dentist'])
data = pd.DataFrame(d)
data = pd.concat([data]*10000).reset_index(drop=True)

#print (data)

In [122]: %timeit data[data['BusinessDescription'].str.contains('dental', flags = re.IGNORECASE)]
10 loops, best of 3: 28.9 ms per loop

In [123]: %timeit data[data['BusinessDescription'].str.lower().str.contains('dental')]
10 loops, best of 3: 32.6 ms per loop

警告

性能实际上取决于数据 - DataFrame 的大小和匹配条件的值的数量。

【讨论】:

如果情况是问题,我们可以在str. 之后添加.lower() 对吗?不需要模块? 是的,我之前已经完成了import re,但是忽略大小写标志工作得很好,谢谢! 我用时间来做,但你更快;)【参考方案2】:

将字符串用引号括起来。

df[df['col'].str.contains('test')]

谢谢

【讨论】:

【参考方案3】:

添加条件也可以

df[df['col'].str.contains('test') == True]

【讨论】:

是的,我也试过了,但仍然返回一个带有 col 标题的空数据框......我想知道它是否与数据类型有关? 投反对票,因为 Python 中的条件是根据 == True 评估的,这已经使这变得多余了。

以上是关于如何按字符串过滤熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章

过滤熊猫数据框列中的字符串/浮点数/整数值

如何按月份和年份输入过滤具有日期时间索引的数据框?熊猫

如何按字符串索引上的自定义顺序对熊猫数据框进行排序

根据字符串列表过滤熊猫中的数据框

按列表过滤熊猫数据框

Pandas:按类别过滤数据框