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

如何将字符串形式的Polars数据类型转换为原生PolarsDataType以用于read_csv的dtypes参数

如何将字符串形式的Polars数据类型转换为原生PolarsDataType以用于read_csv的dtypes参数

我太懂这种困扰了——从JSON里读出来的类型全是字符串,直接塞给read_csv()的dtypes参数铁定报错,手动一个个改又不现实,毕竟你还有一大堆字段要处理。这里有几个实用的解决方案,帮你批量搞定:

方法一:用getattr()从Polars模块获取原生类型(推荐)

Polars的所有数据类型其实都是pl模块下的属性,比如pl.Int64本质就是polars.Int64。我们可以把字符串里的pl.前缀去掉,再用getattr()从pl模块里取出对应的类型对象:

import polars as pl
import json

# 读取你的JSON配置文件
with open("your_config.json", "r") as f:
    config = json.load(f)
# 取出字符串形式的类型映射
str_dtypes = config["columns_dtypes_polars"]

# 批量转换为原生PolarsDataType
native_dtypes = {
    col: getattr(pl, dtype_str.split(".")[1]) 
    for col, dtype_str in str_dtypes.items()
}

# 现在就能正常传入read_csv了
df = pl.read_csv("your_data.csv", dtypes=native_dtypes)

这个方法既安全又省心,不用手动维护所有类型的映射,只要字符串格式是pl.XXX就能自动转换,完全没有安全风险,特别适合你字段多的场景。

方法二:用eval()快速转换(谨慎使用)

如果你完全信任JSON配置的来源(比如是自己生成的,没有外部输入),可以用eval()直接执行字符串得到原生类型:

native_dtypes = {col: eval(dtype_str) for col, dtype_str in str_dtypes.items()}

⚠️ 注意:eval()会执行字符串中的任意代码,如果JSON里混入恶意内容,会带来安全隐患,非必要不推荐用这个方法。

方法三:手动创建类型映射字典(最安全)

如果你的类型种类不多,或者想严格控制允许的类型,可以提前创建一个字符串到原生类型的映射表,再批量替换:

type_mapping = {
    "pl.Utf8": pl.Utf8,
    "pl.Int64": pl.Int64,
    "pl.Float64": pl.Float64
}

native_dtypes = {col: type_mapping[dtype_str] for col, dtype_str in str_dtypes.items()}

这个方法完全避免了动态执行代码的风险,适合对安全性要求极高的场景,只是需要你把所有用到的类型都提前加到映射表里。

总结下来,优先选第一种getattr()的方法,高效又安全,完美适配你大量字段的需求。

备注:内容来源于stack exchange,提问作者Bish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:13:00