Polars读取Excel遇日期格式错误,如何强制按字符串读取?
解决Polars读取格式混乱Excel时的日期解析与类型转换问题
核心问题拆解
pl.read_excel报错XlsxValueError,根源是xlsx2csv在解析Excel时自动尝试转换日期格式,但文件中存在混合的数值型日期与其他格式,触发解析冲突infer_schema_length=0是Polars处理CSV的参数,无法影响xlsx2csv的日期解析逻辑,因此无效- Pandas读入后转Polars报
ArrowTypeError,是因为目标列存在混合类型(字符串/整数),Arrow无法兼容这种非统一类型
最优解决方案
1. 禁用xlsx2csv的日期自动解析
直接通过xlsx2csv_options传入no_date=True,强制xlsx2csv不解析任何日期单元格,全部按原始字符串(包括数值型日期的数字)输出,从根源避免格式错误:
import polars as pl df = pl.read_excel( file="file_path", sheet_name="sheet_name", xlsx2csv_options={"skip_hidden_rows": False, "no_date": True} )
2. 强制指定列的读取类型(Polars 0.20+)
如果明确知道哪些列存在格式混乱,可通过dtypes参数直接指定这些列为字符串类型,跳过Polars的自动类型推断:
df = pl.read_excel( file="file_path", sheet_name="sheet_name", dtypes={"存在问题的日期列": pl.Utf8}, xlsx2csv_options={"skip_hidden_rows": False} )
3. 优化Pandas转Polars的流程
若必须依赖Pandas读取,需先统一列类型为字符串,再转换为Polars DataFrame,避免混合类型触发Arrow错误:
import pandas as pd import polars as pl # 方法1:强制所有列按字符串读取 df_pd = pd.read_excel("file_name", sheet_name="sheet_name", dtype=str) df_pl = pl.from_pandas(df_pd) # 方法2:仅针对问题列指定类型 df_pd = pd.read_excel( "file_name", sheet_name="sheet_name", dtype={"存在问题的日期列": str} ) df_pl = pl.from_pandas(df_pd)
内容的提问来源于stack exchange,提问作者miroslaavi
相关产品推荐
相关产品推荐

