非格式化浮点数值转%H%M格式时间戳:to_datetime处理5.0报错求助
解决方案
问题出在5.0这类数值转换为字符串后是"5",不符合%H%M格式要求的4位数字(HHMM),导致pd.to_datetime解析失败。以下是具体解决步骤:
步骤1:转换浮点数为整数并补零到4位
先将浮点数列转为整数,再格式化为4位字符串(不足4位时前面补零),确保每个值都符合HHMM的格式规范:
import pandas as pd # 创建示例DataFrame df = pd.DataFrame({'time': [5.0, 504.0, 847.0, 11.0, 1247.0]}) # 转换为整数→字符串→补零到4位 df['time_hhmm'] = df['time'].astype(int).astype(str).str.zfill(4)
执行后time_hhmm列的值为:["0005", "0504", "0847", "0011", "1247"],完全符合%H%M的解析要求。
步骤2:转换为时间戳或格式化字符串
方式1:转为Python时间对象
使用pd.to_datetime解析后,提取时间部分:
df['timestamp'] = pd.to_datetime(df['time_hhmm'], format='%H%M').dt.time
结果timestamp列的值为:[00:05:00, 05:04:00, 08:47:00, 00:11:00, 12:47:00]。
方式2:直接生成HH:MM格式字符串
如果不需要时间对象,仅需格式化后的字符串,可以直接截取拼接:
df['time_formatted'] = df['time_hhmm'].str[:2] + ':' + df['time_hhmm'].str[2:]
结果time_formatted列的值为:["00:05", "05:04", "08:47", "00:11", "12:47"]。
特殊情况处理
如果你的数据中存在非整数型浮点数(如5.5),可以先通过round()或floor()取整后再处理:
# 四舍五入取整 df['time_hhmm'] = df['time'].round().astype(int).astype(str).str.zfill(4) # 或者向下取整 df['time_hhmm'] = df['time'].astype(int).astype(str).str.zfill(4)
内容的提问来源于stack exchange,提问作者Fernando Araiza
相关产品推荐
相关产品推荐

