如何无需指定列名对Polars DataFrame所有列执行字符串替换?
在Polars中批量对所有列执行字符串替换的正确方法
你之前代码报错的原因
你用的pl.all().map(lambda x: x.replace("A", "B"), df)逻辑不对:map是用来处理Series里的单个元素的,不是用来对整列做字符串替换的。而且你把整个DataFrame传给map的参数,Polars没法推断正确的数据类型,所以才会抛出ValueError: Cannot infer dtype from 'shape: (150000, 150)这个错误。
正确实现方法
分两种场景给你方案:
- 场景1:只对字符串列执行替换(推荐,避免非字符串列报错)
如果你的DataFrame里混了数值、日期等非字符串列,用pl.col(pl.Utf8)精准选中所有字符串类型的列,再批量替换:
df = df.with_columns(pl.col(pl.Utf8).str.replace("A", "B"))
- 场景2:确定所有列都是字符串类型
直接用pl.all()选中所有列,调用str.replace即可:
df = df.with_columns(pl.all().str.replace("A", "B"))
额外说明
别用select,用with_columns更合适——它只会修改你指定的列,同时保留其他所有列;而select会直接替换整个DataFrame的列集合,容易丢数据。
内容的提问来源于stack exchange,提问作者exquisitecharm
相关产品推荐
相关产品推荐

