检查DataFrame字符串值是否包含带有某些前缀的单词

时间:2018-11-29 22:53:09

标签: python string pandas

第一次与Pandas合作,我正努力向DataFrame查询此规范。

假设我按如下方式创建一个数据框:

df = pd.read_csv(_file, names=['UID', 'Comment', 'Author', 'Relevancy'])

哪个给:

UID  .     Comment           .  Author .  Relevancy
1234 . motorcycles are cool  . dave    . 12
5678 . motorhomes are cooler . mike    . 13
9101 . i love motorbikes     . frank   . 14

查询单词“ motor”时,我需要返回所有这些行。

即如果它的“注释”字符串包含以给定单词为前缀的单词,则应返回一行。

我本质上想做类似的事情:

df["Comment"][any(word in df["Comment"].str.split() if word.startswith("motor"))]

非常感谢您的帮助和指导。

1 个答案:

答案 0 :(得分:0)

熊猫str操作未向量化。您可以使用列表理解:

df = pd.DataFrame({'Comment': ['motorcycles are cool', 'motorhomes are cooler',
                               'i love motorbikes', 'nomotor test string',
                               'some other test string']})

flag = [any(w.startswith('motor') for w in x.casefold().split()) for x in df['Comment']]
res = df.loc[flag]

print(res)

                 Comment
0   motorcycles are cool
1  motorhomes are cooler
2      i love motorbikes

使用熊猫str方法的效率较低的版本是可能的:

def check_words(x):
    return any(w.startswith('motor') for w in x)

flag = df['Comment'].str.lower().str.split().map(check_words)
res = df.loc[flag]