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

pandas转换时间字符串返回十进制值、无法提取纯时间该如何解决

问题根因

你看到的十进制浮点数是datetime.time类型被隐式转换后的结果:该值等于对应时间的当天总秒数除以86400(全天总秒数)。出现这个问题一般有两个触发原因:

  1. 原代码中的replace用法错误,没有正确清理字符串中的空格,部分不符合格式的字符串被转为默认日期的时间值
  2. 如果后续你将处理后的Pandas DataFrame写回Spark/其他存储,datetime.time类型不被识别,会被强制转换为浮点型的时间占比

场景1:仅在Pandas环境中使用,需要保留时间类型可参与运算

import pandas as pd
col_list2=['clm_rcvd_tm','gtwy_rcvd_tm']
pandas_df_1=df2.toPandas()
for x in col_list2:
    # 先正确清理字符串中的所有空格
    cleaned_series = pandas_df_1[x].str.replace(" ", "", regex=False)
    # 转为timedelta类型,支持直接做时间差等运算,不会转成浮点数
    pandas_df_1[x] = pd.to_timedelta(cleaned_series)

如果需要保留datetime.time格式,只需要修正replace写法即可:

for x in col_list2:
    cleaned_series = pandas_df_1[x].str.replace(" ", "", regex=False)
    pandas_df_1[x] = pd.to_datetime(cleaned_series, format='%H:%M:%S').dt.time

场景2:处理后需要将Pandas DataFrame写回Spark/导出存储

建议优先转成字符串格式保留可读性,或者转成秒数方便后续计算:

for x in col_list2:
    cleaned_series = pandas_df_1[x].str.replace(" ", "", regex=False)
    # 方式1:转成HH:MM:SS格式字符串,不会出现类型转换异常
    pandas_df_1[x] = pd.to_datetime(cleaned_series, format='%H:%M:%S').dt.strftime('%H:%M:%S')
    # 方式2:转成当天总秒数的整数类型,适合后续做时间统计运算
    # dt_obj = pd.to_datetime(cleaned_series, format='%H:%M:%S')
    # pandas_df_1[x] = dt_obj.dt.hour * 3600 + dt_obj.dt.minute *60 + dt_obj.dt.second

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:06