如何用pandas.read_excel()正确读取Excel中的HH:MM:SS格式时间
解决pandas读取Excel时间列显示为小数的问题
Excel中的HH:MM:SS格式时间本质是一天的占比小数(比如10:13:20对应0.4259259),pandas读入后若显示为object类型的小数,可通过以下两种批量转换方法恢复原时间格式:
方法一:读取时直接转换
用pd.read_excel()的converters参数指定列转换逻辑,一步到位生成格式化时间:
import pandas as pd df = pd.read_excel("your_file.xlsx", converters={ "Start_Time": lambda x: pd.to_datetime(float(x), unit="d").strftime("%H:%M:%S") if pd.notna(x) else "" })
- 逻辑说明:将读入的object类型小数转为float,通过
unit="d"把天数比例转成datetime对象,再格式化为HH:MM:SS格式;空值保留为空字符串。
方法二:读入后批量转换
若已加载数据到DataFrame,按以下步骤处理:
- 先将列转为数值类型(自动将空值转为NaN):
df["Start_Time"] = pd.to_numeric(df["Start_Time"], errors="coerce")
- 高效批量转换为时间字符串:
推荐用pd.to_timedelta实现批量处理(无需逐行apply):
# 转换为时间差类型并格式化 df["Start_Time"] = pd.to_timedelta(df["Start_Time"].astype(float), unit="d").dt.strftime("%H:%M:%S") # 将NaN替换为空字符串 df["Start_Time"] = df["Start_Time"].fillna("")
示例验证
针对你提供的示例数据,上述方法会将对应小数转为16:24:50、03:29:04这类原格式时间,空值保持为空,完全匹配Excel中的原始显示。
内容的提问来源于stack exchange,提问作者Mel Huang
相关产品推荐
相关产品推荐

