我将如何在熊猫中选择匹配字符串列表的行,而不仅仅是一个特定的字符串?

use*_*614 2 python pandas

假设我们有一个 dataframe-df 和一个标记为“A”的列。对于选择匹配一个字符串 -'some_string' 的行,df['A'].str.contains('some_string') 效果很好。

我的问题是,是否有相应的方法传递给包含字符串列表,以便可以获得部分匹配?我可以给它一个字符串列表而不是 'some_string' 吗?我试图避免使用 for 循环和切片数据帧并连接到一个新的数据帧。

假设数据框是

pd.DataFrame(np.array([['cat', 2], ['rat', 5], ['ball', 8],['string', 8]]),columns=['A', 'B']))
Run Code Online (Sandbox Code Playgroud)

list =['at','ll','ac']
Run Code Online (Sandbox Code Playgroud)

所以我想选择带有猫、老鼠、球的行。对不起,人为设计的例子。

Gra*_*her 5

pandas.Series.str.contains接受字符串或正则表达式。所以你可以从字符串列表中构建一个正则表达式:

import pandas as pd

strings = "fo", "ba"
x = pd.Series(["foo", "bar", "baz", "buzz"])
x.str.contains("|".join(strings))
# 0     True
# 1     True
# 2     True
 #3    False
# dtype: bool
Run Code Online (Sandbox Code Playgroud)

这可能是缓慢的,如果以配合您的字符串列表对很长,你可能需要na=False忽略NaN值,如在评论中提到通过@ anky_91

  • 还添加``na=False` 以防万一。:) (2认同)