如何删除Polars DataFrame中匹配指定正则表达式的行?
解决Polars DataFrame删除含指定正则表达式行的问题
你之前的操作只是生成了标记匹配情况的布尔Series,但没有对DataFrame执行过滤操作,直接赋值反而会新增列。正确的做法是用filter()方法结合取反的匹配条件,保留不匹配正则的行(也就是删除匹配的行)。
具体实现
import polars as pl # 定义目标列和正则表达式 target_col = "col1" regex_pattern = r"你的正则表达式" # 过滤掉匹配正则的行,保留不匹配的 filtered_df = df.filter(~pl.col(target_col).str.contains(regex_pattern))
示例说明
假设原始DataFrame如下:
df = pl.DataFrame({ "col1": ["apple123", "banana", "cherry45", "date"], "col2": [10, 20, 30, 40] })
如果要删除col1中包含数字的行(正则用r"\d"),执行过滤后得到的filtered_df结果为:
shape: (2, 2) ┌────────┬──────┐ │ col1 ┆ col2 │ │ --- ┆ --- │ │ str ┆ i64 │ ├────────┼──────┤ │ banana ┆ 20 │ │ date ┆ 40 │ └────────┴──────┘
关键说明
~符号用于对布尔Series取反,把“匹配正则”的标记转为“不匹配”,这样filter()就会保留这些行,间接实现删除匹配行的需求。- 不要直接将
str.contains()的结果赋值给DataFrame的新列(比如df["filter"] = ...),这就是你之前生成额外布尔列的原因。
内容的提问来源于stack exchange,提问作者ErivelM
相关产品推荐
相关产品推荐

