如何将Polars DataFrame列类型从float64转换为int64?
解决Polars DataFrame列类型转换问题
问题分析
你尝试的代码无法运行,核心原因是Polars是不可变数据结构,所有操作都会返回新的DataFrame对象,不能像Pandas那样直接对列视图赋值。而且df.select(pl.col('foo'))返回的是一个新的单列DataFrame,不能作为赋值目标。
正确实现方式
方法1:用with_columns更新指定列(推荐)
这是Polars中修改列的标准方式,会保留所有现有列,仅更新目标列的类型:
import polars as pl df = pl.DataFrame({"foo": [1.0, 2.0, 3.0], "bar": [11, 5, 8]}) # 转换foo列为int64,重新赋值给df df = df.with_columns(pl.col("foo").cast(pl.Int64))
方法2:用select重新构造DataFrame
如果你需要明确指定保留的列,也可以用select,但要注意包含所有需要的列:
# 方式2-1:直接列出所有列 df = df.select( pl.col("foo").cast(pl.Int64), pl.col("bar") ) # 方式2-2:排除目标列后再添加转换后的列(适合多列场景) df = df.select( pl.all().exclude("foo"), pl.col("foo").cast(pl.Int64) )
与Pandas的差异说明
Pandas支持原地修改列类型(df['foo'] = ...),但Polars的设计理念是不可变性,所有数据变换都返回新对象,因此必须将操作结果重新赋值给原变量(或新变量)才能生效。
内容的提问来源于stack exchange,提问作者lmocsi
相关产品推荐
相关产品推荐

