You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:20:49