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

Pandas处理Excel日期异常:无法提取纯日期且列移位带时分秒

Pandas处理Excel日志:日期列格式与位置异常修复

问题描述

用户编写的Pandas代码用于处理Excel日志文件,期望保持原列顺序、Date列为纯日期并按降序排列,但实际输出中Date列移至开头且带有00:00:00时分秒后缀,不符合预期。

原代码

def arrange_by_date():
    df = pd.read_excel("logfile_Final_test.xlsx")
    df = df.sort_values(by="Date", ascending=True).set_index('Date').last('3M')
    df = df.sort_values(by="Date", ascending=False)
    df.to_excel("Master_logfile.xlsx", index=True)

arrange_by_date()

原始数据格式

Database         Date       Time         Description
Some_DB_name    2022-12-25   some_time    Some_Description
Some_DB_name    2023-01-14   some_time    Some_Description
    ..             ..           ..              ..
Some_DB_name    2022-11-19   some_time    Some_Description

预期输出

Database         Date        Time         Description
    Some_DB_name    2023-01-14   some_time    Some_Description
    Some_DB_name    2022-12-25   some_time    Some_Description
        ..             ..           ..              ..
    Some_DB_name    2022-11-19   some_time    Some_Description

实际异常输出

Date             Database        Time        Description
2023-01-14 00:00:00    Some_DB_name   some_time    Some_Description
2022-12-25 00:00:00    Some_DB_name   some_time    Some_Description
    ..           ..           ..              ..
2022-11-19 00:00:00    Some_DB_name   some_time    Some_Description

问题原因

  1. set_index('Date')将Date列设为DataFrame索引,导出Excel时索引会默认放在第一列,导致列顺序打乱。
  2. Date列被解析为datetime64类型,导出时会自动带上时分秒后缀(即使原始数据只有日期)。

修复方案

修改代码,避免将Date设为索引,同时提取纯日期格式:

def arrange_by_date():
    import pandas as pd
    # 读取Excel时直接解析Date列为日期类型
    df = pd.read_excel("logfile_Final_test.xlsx", parse_dates=["Date"])
    
    # 计算3个月前的日期,筛选最近3个月的数据
    three_months_ago = pd.Timestamp.now() - pd.DateOffset(months=3)
    df = df[df["Date"] >= three_months_ago]
    
    # 提取纯日期部分,转换为date类型(去除时分秒)
    df["Date"] = df["Date"].dt.date
    
    # 按Date列降序排序,保持原列顺序
    df = df.sort_values(by="Date", ascending=False)
    
    # 导出Excel时不写入索引,保留原始列顺序
    df.to_excel("Master_logfile.xlsx", index=False)

arrange_by_date()

关键修改点说明

  • 解析日期列:parse_dates=["Date"]确保读取时将Date列识别为datetime类型,方便后续处理。
  • 筛选数据:用布尔索引df["Date"] >= three_months_ago替代set_index().last('3M'),避免打乱列顺序。
  • 提取纯日期:dt.date将datetime类型转换为纯date类型,导出时不会带时分秒。
  • 导出设置:index=False避免将索引写入Excel,保持原始列的排列顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:10:54