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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:17