使用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
相关产品推荐
相关产品推荐

