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