第一次与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"))]
非常感谢您的帮助和指导。
答案 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]