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

如何通过字典批量转换Dask DataFrame所有列的数据类型

Dask/Pandas DataFrame 批量按字典转换列类型方案

使用Dask读取CSV文件时,可直接在read_csv方法中传入dtype参数一次性指定各列数据类型,参考代码如下:

ddf = dd.read_csv("data/csvs/*.part", dtype=better_dtypes)

对于从pandas DataFrame转换得到的Dask DataFrame,同样支持传入类型字典一次性完成全列类型转换,和读取CSV时的使用体验完全一致。

错误写法说明

你之前尝试的写法存在问题:

# 错误写法
ddf = ddf.astype(better_dtypes).dtypes

问题出在末尾的.dtypes:这是DataFrame的属性,作用是返回各列当前数据类型的序列,你将这个属性的返回值赋值给ddf后,变量存储的就不再是Dask DataFrame对象,而是类型信息本身,完全无法得到类型转换后的数据集。

正确实现方法

直接去掉末尾的.dtypes调用即可,astype方法原生支持传入列名到目标类型的映射字典完成批量转换,该写法对pandas DataFrame、Dask DataFrame通用:

# 正确写法:传入提前定义的类型字典直接完成全列转换
ddf = ddf.astype(better_dtypes)

你提前定义的类型映射字典不需要做任何修改,可以直接传入使用:

better_dtypes = {
    "id1": "string[pyarrow]",
    "id2": "string[pyarrow]",
    "id3": "string[pyarrow]",
    "id4": "int64",
    "id5": "int64",
    "id6": "int64",
    "v1": "int64",
    "v2": "int64",
    "v3": "float64",
}

注意事项

  • 如果使用string[pyarrow]这类基于pyarrow后端的数据类型,需要提前在环境中安装pyarrow依赖,否则会触发类型不存在的报错
  • 类型转换完成后,可以单独执行print(ddf.dtypes)校验各列类型是否符合预期,不要把该属性调用写到DataFrame的赋值语句中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:51:07