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

使用Polars读取CSV文件时,设置所有列为字符串类型失败的问题求助

使用Polars读取CSV文件时,设置所有列为字符串类型失败的问题求助

我最近在用Polars读取CSV文件时遇到了一个麻烦:我希望所有列都保持字符串类型,不想让程序自动将值解析成日期或整数,除非我明确指定类型。我尝试用schema_overrides={'*': pl.Utf8}来实现这个需求,但发现它根本没法阻止自动类型转换,运行下面的代码还会报错:

import polars as pl  

# 尝试用schema_overrides将所有列设为字符串类型读取CSV
file_path = "./xyz.csv"
df = pl.read_csv(file_path, schema_overrides={'*': pl.Utf8})  

# 打印DataFrame
print(df)

有没有大佬能告诉我,到底该怎么设置才能让Polars把CSV里的所有列都以字符串类型读取呢?


别着急,我来帮你解决这个问题。其实schema_overrides参数的作用是覆盖已经自动推断出来的Schema,而不是完全禁用类型推断,所以它没法从根源上阻止Polars自动解析日期或整数。要实现所有列都以字符串类型读取的需求,你可以试试下面两种方法:

方法一:直接使用dtypes参数指定全局类型

dtypes参数可以直接指定所有列的解析类型,Polars会跳过自动类型推断,直接按你指定的类型解析所有列,这是最简便的方式:

import polars as pl

file_path = "./xyz.csv"
# 用dtypes指定所有列都为Utf8类型
df = pl.read_csv(file_path, dtypes=pl.Utf8)
print(df)

方法二:禁用类型推断后手动指定全量Schema

如果你需要更精细的控制,也可以先关闭自动类型推断,获取到所有列名后,再手动构建一个全字符串类型的Schema:

import polars as pl

file_path = "./xyz.csv"
# 先读取文件,关闭类型推断(infer_schema_length=0表示不基于任何行推断类型)
temp_df = pl.read_csv(file_path, infer_schema_length=0)
# 为每个列构建字符串类型的Schema
full_string_schema = {column: pl.Utf8 for column in temp_df.columns}
# 使用指定的Schema重新读取文件
df = pl.read_csv(file_path, schema=full_string_schema)
print(df)

这两种方法都能有效阻止Polars自动解析日期或整数,让所有列保持字符串类型,你可以根据自己的需求选择其中一种~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:14:34