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

Pandas转换时间列未按要求格式化问题求助

解决Pandas时间转换带日期前缀及Excel时间计算问题

问题原因

你用pd.to_datetime转换得到的是datetime64[ns]类型的完整日期时间对象,当输入只有时间部分时,Pandas会自动补全默认起始日期1900-01-01,这是该类型的特性。

解决方案

根据你的需求(后续在Excel中做时间计算,单元格为日期/时间格式),提供两种可行方案:


方案1:转换为时间差(Timedelta)类型(推荐)

直接将字符串转为timedelta64类型,仅保留时分秒信息,导出Excel后会被自动识别为可计算的时间格式:

import pandas as pd

# 直接转换为Timedelta类型
df["Pausetime"] = pd.to_timedelta(df["Pausetime"])
df["Worktime"] = pd.to_timedelta(df["Worktime"])

# 打印输出(显示为0 days HH:MM:SS,无多余日期)
print(df["Worktime"])

输出示例:

1   0 days 02:28:49
2   0 days 04:47:45
3   0 days 04:49:09
4   0 days 02:46:47
Name: Worktime, dtype: timedelta64[ns]

导出Excel后,单元格会自动识别为时间格式,直接支持加减等时间计算。


方案2:保留Datetime类型,导出时设置Excel显示格式

若需保留datetime类型(比如后续有日期相关操作),可在导出Excel时指定单元格显示为纯时分秒格式,不影响底层的日期时间数值及计算:

import pandas as pd
from openpyxl.utils import get_column_letter

# 转换为datetime类型(依然带日期前缀,但不影响计算)
time_format = "%H:%M:%S"
df["Pausetime"] = pd.to_datetime(df["Pausetime"], format=time_format)
df["Worktime"] = pd.to_datetime(df["Worktime"], format=time_format)

# 导出Excel并设置时间列格式
with pd.ExcelWriter("output.xlsx", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="Sheet1", index=False)
    worksheet = writer.sheets["Sheet1"]
    
    # 遍历目标列,设置单元格格式为HH:MM:SS
    for col_name in ["Pausetime", "Worktime"]:
        col_index = df.columns.get_loc(col_name) + 1  # Excel列索引从1开始
        col_letter = get_column_letter(col_index)
        worksheet.column_dimensions[col_letter].number_format = "HH:MM:SS"

导出后Excel单元格仅显示时分秒,且为可计算的日期时间格式。


注意

如果仅需在Pandas打印时去掉日期前缀,可使用df["Worktime"].dt.strftime("%H:%M:%S")转为字符串,但此方法会丢失时间类型特性,无法在Pandas内做时间计算,导出Excel后需手动转换格式才能计算,不推荐用于后续需计算的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:43:17