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

Pandas读取Excel生成DataFrame时日期列带多余零如何处理

日期异常示例

问题原因

你调用pd.read_excel时指定了全局dtype=str参数,Excel中原本为 datetime 类型的单元格会先被解析为Timestamp对象,再强制转为字符串时就会自动带上多余的.0后缀。

另外你当前代码的执行顺序存在问题:pd.read_excel逻辑写在了for循环外部,此时header、sheet_name等配置参数还没有被赋值,运行会直接报错,需要把读取逻辑挪到for循环内部。

解决方案

方案1:自动识别日期类型,后续统一格式化(推荐)

不需要强制全局读为字符串,pandas会自动识别日期列,后续按需转成标准格式的日期字符串即可:

for object in json_meta_data:
    header = object['excel_header'] - 1
    excel_filename = object['excel_filename']
    sheet_name = object['excel_sheet_name']
    usecols = object['excel_usecols']
    nrows = object['excel_nrows']
    # 读取时不指定dtype=str,自动识别类型
    df = pd.read_excel(
        full_excel_path,
        sheet_name=sheet_name,
        engine='openpyxl',
        header=header,
        usecols=usecols,
        nrows=nrows
    )
    # 所有自动识别的日期列统一转成你需要的字符串格式,比如%Y-%m-%d仅保留日期
    for date_col in df.select_dtypes(include='datetime64').columns:
        df[date_col] = df[date_col].dt.strftime('%Y-%m-%d')
    dataframes.append(df)

方案2:强制全列读为字符串,批量清洗后缀

如果业务要求必须所有列都读取为字符串格式,可以在读入后批量替换掉所有末尾的.0:

for object in json_meta_data:
    header = object['excel_header'] - 1
    excel_filename = object['excel_filename']
    sheet_name = object['excel_sheet_name']
    usecols = object['excel_usecols']
    nrows = object['excel_nrows']
    df = pd.read_excel(
        full_excel_path,
        sheet_name=sheet_name,
        engine='openpyxl',
        header=header,
        usecols=usecols,
        nrows=nrows,
        dtype=str
    )
    # 正则替换所有列中末尾的.0
    df = df.replace(r'\.0$', '', regex=True)
    dataframes.append(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:03