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

如何解决使用Polars读取xlsx文件时的日期格式问题?

更新说明

Polars现已将fastexcel设为read_excel的默认引擎,示例代码当前可正常运行。

问题描述

我有一个.xlsx格式的Excel文件,其中包含date_of_birth字段,该字段的年份范围为1860年至2000年,示例数据如下:

┌────────────────┐
│ date_of_birth  │
│ ---            │
│ str            │
╞════════════════╡
│ 1/11/1887      │
│ 1/11/1887      │
│ 1/11/1889      │
│ 1/12/1886      │
│ 1/13/1889      │
│ 1/15/1886      │
│ 1/17/1888      │
│ 1/18/1889      │
│ 1/18/1885      │
│ 1/2/1880       │    
└────────────────┘

我使用以下代码加载Excel文件:

import tempfile
import polars as pl
from pathlib import Path

with tempfile.TemporaryDirectory() as tmp_dir:
    filename = Path(tmp_dir) / "1.xlsx"
    (pl.from_repr("""
    ┌────────────────┐
    │ date_of_birth  │
    │ ---            │
    │ str            │
    ╞════════════════╡
    │ 1/11/1887      │
    │ 1/11/1887      │
    │ 1/11/1889      │
    │ 1/12/1886      │
    │ 1/13/1889      │
    │ 1/15/1886      │
    │ 1/17/1888      │
    │ 1/18/1889      │
    │ 1/18/1885      │
    │ 1/2/1880       │    
    └────────────────┘
    """)
    .with_columns(pl.col.date_of_birth.str.to_date("%m/%d/%Y"))
    .write_excel(filename))
    df = pl.read_excel(filename)
    print(df)

运行代码时出现错误:

XlsxValueError: Error: potential invalid date format.

请问如何忽略或修复该错误,以在数据框中获取原始数据?是否有可行的解决方案?

解决方案

方案1:切换到openpyxl引擎读取

fastexcel默认会对早于1900年的日期抛出格式错误,而openpyxl会将这类日期识别为字符串,读取后可自行处理格式转换。修改读取代码:

df = pl.read_excel(filename, engine="openpyxl")

后续如需转换为日期类型,可执行:

df = df.with_columns(pl.col("date_of_birth").str.to_date("%m/%d/%Y"))

方案2:强制指定字段为字符串类型

直接指定date_of_birth字段以字符串类型读取,跳过自动日期解析,确保获取原始数据:

df = pl.read_excel(filename, dtype={"date_of_birth": pl.String})

之后可根据需求自行转换日期格式。

内容的提问来源于stack exchange,提问作者myamulla_ciencia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:48:09