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
相关产品推荐
相关产品推荐

