如何在Polars DataFrame中替换整串匹配的字符串而非子串?
解决方案
要实现仅替换**整个字符串完全等于"0"**的单元格,你需要用条件判断精准匹配,而非子串替换。str.replace会替换所有匹配的子串,这就是它把"011212"改成"-111212"的核心原因。
推荐两种高效实现方式:
方式一:针对所有字符串列(推荐)
如果数据框中同时存在字符串列与其他类型列,这个方法仅处理字符串列,避免类型报错:
df = df.with_columns( pl.col(pl.String).when(pl.col(pl.String) == "0").then("-1").otherwise(pl.col(pl.String)) )
方式二:处理所有列(假设全为字符串类型)
若确定所有列都是字符串类型,可简化为:
df = df.with_columns( pl.all().when(pl.all() == "0").then("-1").otherwise(pl.all()) )
原理说明
pl.when(condition).then(value).otherwise(value)是Polars的条件表达式,仅当条件(单元格值完全等于"0")满足时才执行替换,否则保留原内容。- 用
pl.col(pl.String)筛选字符串列,确保不会误处理数字、布尔等其他类型列,适配你数千列的场景,执行效率更高。
内容的提问来源于stack exchange,提问作者Míriam
相关产品推荐
相关产品推荐

