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

