Python Polars中when-then-otherwise函数使用问题求助
解决Polars DataFrame语言列替换问题
你的代码问题出在.then()的写法上,不能直接对DataFrame列赋值,Polars的表达式需要返回一个值或表达式,而非执行赋值操作。以下是正确的实现方式:
基础替换(匹配"almanca"则替换)
如果只需要将包含"almanca"的language值替换为"almanca",同时保留其他值不变,可以这样写:
deneme = deneme.with_columns( pl.when(pl.col('language').str.contains('almanca')) .then(pl.lit('almanca')) # 使用pl.lit返回常量值 .otherwise(pl.col('language')) # 不满足条件的保留原字段值 .alias('language') # 覆盖原列,也可指定新列名 )
多条件分类替换
如果需要处理多种语言(比如同时替换"fransızca, ileri..."为"fransızca"),可以链式调用.when().then():
deneme = deneme.with_columns( pl.when(pl.col('language').str.contains('almanca')) .then(pl.lit('almanca')) .when(pl.col('language').str.contains('fransızca')) .then(pl.lit('fransızca')) .otherwise(pl.col('language')) .alias('language') )
补充说明
pl.lit()是Polars中创建常量表达式的标准方式,用于返回固定值- 必须添加
.otherwise(),否则不满足条件的行会被设置为null - 若不想覆盖原列,将
.alias('language')改为新列名即可(比如.alias('cleaned_language'))
内容的提问来源于stack exchange,提问作者cinelstat
相关产品推荐
相关产品推荐

