gpt4 book ai didi

python - Pandas:检查字符串是否至少包含列表中的两个单词

转载 作者:行者123 更新时间:2023-11-28 21:09:15 24 4
gpt4 key购买 nike

我正在使用 Pandas 中的快速矢量化 str.contains 方法来检查我的数据框中的每一行是否包含至少一个词来 self 的 list_word

list_words='foo ber haa'

df = pd.DataFrame({'A' : ['foo foor', 'bar bar', 'foo hoo', 'bar haa',
'foo bar', 'bar bur', 'foo fer', 'foo for']})
df
Out[113]:
A
0 foo foor
1 bar bar
2 foo hoo
3 bar haa
4 foo bar
5 bar bur
6 foo fer
7 foo for

df.A.str.contains("|".join(list_words.split(" ")))
Out[114]:
0 True
1 False
2 True
3 True
4 True
5 False
6 True
7 True
Name: A, dtype: bool

问题是:如何检查每一行是否至少包含列表中的两个单词?

我想坚持使用 str.contains,因为它比其他 python 字符串匹配算法快得多。

最佳答案

您可以使用 concat使用列表理解:

#changed ber to bar
list_words='foo bar haa'

df = pd.DataFrame({'A' : ['foo foor', 'bar bar', 'foo hoo', 'bar haa',
'foo bar', 'bar bur', 'foo fer', 'foo for']})

print (df)
A
0 foo foor
1 bar bar
2 foo hoo
3 bar haa
4 foo bar
5 bar bur
6 foo fer
7 foo for

print((pd.concat([df.A.str.contains(word,regex=False) for word in list_words.split()],axis=1))
.sum(1) > 1)

0 False
1 False
2 False
3 True
4 True
5 False
6 False
7 False
dtype: bool

时间:

def jon(df):
set_words = set(list_words.split())
return df.A.apply(lambda L: len(set(L.split()) & set_words) > 1)

In [292]: %timeit ((pd.concat([df.A.str.contains(word) for word in list_words.split()], axis=1)).sum(1) > 1)
100 loops, best of 3: 16 ms per loop

In [325]: %timeit (jon(df))
100 loops, best of 3: 8.97 ms per loop

In [294]: %timeit ((pd.concat([df.A.str.contains(word,regex=False) for word in list_words.split()], axis=1)).sum(1) > 1)
100 loops, best of 3: 8.13 ms per loop

In [295]: %timeit df['A'].map(lambda x: check(x, list_words))
100 loops, best of 3: 14.7 ms per loop

关于python - Pandas:检查字符串是否至少包含列表中的两个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38613043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com