如何筛选到包含 Polars 列表中值的字符串行

How do I filter to rows of strings that contain a value from a list in Polars

提问人:Thomas 提问时间:3/24/2023 更新时间:3/25/2023 访问量:2518

问:

如果您有一个值列表和一个带有一列文本的 Polars 数据帧。并且您想仅筛选到包含列表中项目的行,您将如何编写?

a_list = ['a', 'b', 'c' ]

df = pl.DataFrame( {'col1': ['I am just a string', 'one more, but without the letters', 'we want, a, b, c,', 'Nothing here']} )

我认为它会有一些组合/使用 和 的东西,但我无法让它工作。.is_in(a_list).str.contains()

包含 python-polars isin

评论

1赞 Thomas 3/24/2023
df.filter(pl.col('col1').str.contains('|'.join(a_list)) 工作,由 Hussain 提供
1赞 jqurious 3/24/2023
对于一般方法 - 您可以使用和理解,例如pl.anydf.filter(pl.any(pl.col("col1").something() for value in values))
0赞 Thomas 10/25/2023
略有不同,但相关的问题。完全错过了@jqurious在这里的评论,但现在更新了我的笔记。
1赞 jqurious 10/25/2023
该评论现在已经过时,需要改用。例如:.any_horizontal()df.filter(pl.any_horizontal(pl.col("col1").str.contains(s) for s in strings))

答:

0赞 Hussain Fakhruddin 3/24/2023 #1

要过滤 Polars 数据帧 df 中 col1 列包含列表a_list中的任何值的行,您可以使用 str.contains() 方法和 |运算符来检查多个值。下面是执行此操作的代码:

a_list = ['a', 'b', 'c']

df = pl.DataFrame({
    'col1': ['I am just a string', 'one more, but without the letters', 'we want, a, b, c,', 'Nothing here']
})

mask = df.filter(pl.col('col1').str.contains('|'.join(a_list)) 
filtered_df = df[mask]