Python 如何在pandas中选择与字符串列表匹配的行,而不仅仅是一个特定字符串?

Python 如何在pandas中选择与字符串列表匹配的行,而不仅仅是一个特定字符串?,python,pandas,Python,Pandas,假设我们有一个dataframe-df和一个标记为“a”的列。对于选择与一个字符串匹配的行-“some_string”,df['A'].str.contains('some_string')非常有用 我的问题是,是否有相应的方法可以传递给包含字符串列表的对象,以便获得部分匹配?我可以给它一个字符串列表而不是'some_string'吗?我试图避免使用for循环,将数据帧切片并连接到新的数据帧中 假设数据帧是 pd.DataFrame(np.array([['cat', 2], ['rat', 5

假设我们有一个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']))


所以我想用cat,rat,ball来选择行。对不起,这个人为的例子

如果
A
始终包含您希望在列表中找到的字符串,则可以执行以下操作:

df['A'].map(lambda x: 1 if x in list_of_strings else 0) 
lambda函数将为每一行检查
'A'
(临时存储在
x
中的值是否作为
字符串列表中的元素之一存在,并相应地返回
1
0

然后,当此新映射列为
1

时,您可以进行筛选。因此,您可以从字符串列表中构建正则表达式:

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

如果您要匹配的字符串列表很长,并且您可能需要一个
na=False
来忽略
NaN
值,这可能会很慢,如by.

您可以创建一个示例df和一个预期的df吗?这将帮助我们复制您的问题。:)谢谢您可能能够使用
df['a'].str.contains(“|”.join(字符串列表))
。退房可能重复。我们可以在lambda函数中写入任何逻辑。子字符串匹配可以吗?我能说包含吗?是的,但它可能不是很有效。您可以使用列表理解:
lambda x:True in[x in s表示字符串列表中的s]
@Tacratis您应该使用
any(…)
而不是
True in[…]
。另外添加“
na=False
以防万一。:)
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