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

Polars数据转换疑问:两类常见操作问题问询

问题1:如何仅对指定列执行除法操作

原代码使用pl.all()会对DataFrame的所有列执行除法,要仅针对a和c列操作,只需将pl.all()替换为指定列选择器pl.col(['a', 'c'])即可。

修改后的代码:

import polars as pl

df = pl.DataFrame({'a':[3,3,3],'b':[6,6,9], 'c':[6,6,9]})
df = df.with_columns(pl.col(['a', 'c']) / 3.0)

执行后,a和c列会被转换为f64类型并完成除法计算,b列保持原类型和数值不变,完全匹配预期输出。


问题2:解决「TypeError: cannot convert Python type 'method' to Int64」错误

报错存在两个核心问题:

  1. 错误调用Duration属性:Polars中日期相减得到的Duration类型,获取天数的正确属性是.dt.days,而非.dt.total_days(这是Pandas的用法)。原代码中.dt.total_days是未调用的方法引用,导致无法转换为Int64类型。
  2. alias位置错误:alias('active')应该绑定在pl.when(...)的表达式末尾,用于给新增列命名;原代码将其放在with_columns()之后,会错误地给整个DataFrame改名,而非目标列。

修改后的正确代码:

import polars as pl 
from datetime import date

data = { 'last_seen': [5, 20, 3, 8, 12], 'dates': [date(2023, 6, 20), date(2023, 5, 15), date(2023, 6, 27), date(2023, 6, 19), date(2023, 6, 10)] }

df_polars = pl.DataFrame(data)

today = date(2023, 6, 30)

range_mask = ( 
    (df_polars['last_seen'] >= -5) & 
    ( 
        (df_polars['last_seen'] < 15) | 
        ( 
            (df_polars['dates'] > today) & 
            ((df_polars['dates'] - today).dt.days > (df_polars['last_seen'] - 15)) 
        ) 
    ) 
)

df_polars = df_polars.with_columns(pl.when(range_mask).then(True).otherwise(False).alias('active'))

修改后,Duration的天数获取逻辑正确,新增列会被正确命名为active,不再抛出类型错误。

内容的提问来源于stack exchange,提问作者Rade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:52:41