假设我们有一个 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)
所以我想选择带有猫、老鼠、球的行。对不起,人为设计的例子。
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。