如何用字典替换Polars列中的字符串内容?
在Polars中用字典替换字符串的正确方法
你可以直接用Polars原生的replace方法实现和Pandas.replace()类似的功能,完全不需要转成Pandas处理,效率更高。
错误原因
你之前的写法pl.col("List").str.replace_all(lambda key: key,dict())报错是因为str.replace_all的参数逻辑不对——该方法第一个参数是匹配模式,第二个是替换值/函数,不能直接传入字典。
方法一:原生replace方法(推荐,向量化操作)
这是最直接的方式,和Pandas的.replace()行为一致:
import polars as pl df = pl.DataFrame({'List': ['Systems', 'Software', 'Cleared']}) mapping = {'Systems':'Sys','Software':'Soft' ,'Cleared':'Clr'} # 替换匹配的字符串,未匹配的保留原内容 df = df.with_columns( pl.col("List").replace(mapping, default=pl.col("List")) ) print(df)
方法二:正则批量替换(适合键为正则表达式的场景)
如果你的字典键需要正则匹配,可以动态生成匹配模式,再用str.replace_all配合回调函数替换:
import polars as pl df = pl.DataFrame({'List': ['Systems', 'Software', 'Cleared']}) mapping = {'Systems':'Sys','Software':'Soft' ,'Cleared':'Clr'} # 生成匹配所有键的正则模式 pattern = "|".join(mapping.keys()) df = df.with_columns( pl.col("List").str.replace_all(pattern, lambda match: mapping[match.group(0)]) ) print(df)
输出结果
两种方法都会得到你期望的输出:
shape: (3, 1) ┌──────┐ │ List │ │ --- │ │ str │ ╞══════╡ │ Sys │ │ Soft │ │ Clr │ └──────┘
内容的提问来源于stack exchange,提问作者DBOak
相关产品推荐
相关产品推荐

