如何将DataFrame中的浮点型时间值转换为时分秒格式?
解决Pandas中浮点型时间序列转换为HH:MM:SS格式的问题
需求说明
需要将DataFrame中Occurred Time列的浮点值(如1200.0、1536.0)转换为HH:MM:SS格式的时间字符串,初始数据及代码如下:
import pandas as pd df = pd.DataFrame([1200.0, 0.0, 1536.0, 1530.0, 0.0], columns=['Occurred Time']) print(df)
初始输出:
Occurred Time 0 1200.0 1 0.0 2 1536.0 3 1530.0 4 0.0
错误尝试及结果
直接使用pd.to_datetime()转换时,得到了不符合预期的Unix时间戳解析结果:
import pandas as pd df = pd.DataFrame([1200.0, 0.0, 1536.0, 1530.0, 0.0], columns=['Occurred Time']) df['Occurred Time'] = pd.to_datetime(df['Occurred Time']) print(df)
错误输出:
Occurred Time 0 1970-01-01 00:00:00.000001200 1 1970-01-01 00:00:00.000000000 2 1970-01-01 00:00:00.000001536 3 1970-01-01 00:00:00.000001530 4 1970-01-01 00:00:00.000000000
错误原因
pd.to_datetime()默认将数值视为Unix时间戳(从1970-01-01 00:00:00开始的纳秒数),而非我们需要的HHMM格式时间编码,因此解析出了错误的日期时间。
解决方案
以下是几种可行的转换方法:
方法1:字符串补零拆分法
先将浮点数转为4位字符串,拆分出时、分后拼接成目标格式:
import pandas as pd df = pd.DataFrame([1200.0, 0.0, 1536.0, 1530.0, 0.0], columns=['Occurred Time']) # 转为整数后转字符串,补零至4位 df['time_str'] = df['Occurred Time'].astype(int).astype(str).str.zfill(4) # 拆分时分并拼接为HH:MM:SS df['Occurred Time'] = df['time_str'].str[:2] + ':' + df['time_str'].str[2:] + ':00' # 删除中间辅助列 df = df.drop('time_str', axis=1) print(df)
输出结果:
Occurred Time 0 12:00:00 1 00:00:00 2 15:36:00 3 15:30:00 4 00:00:00
方法2:lambda函数格式化法
用字符串格式化直接处理,代码更简洁:
import pandas as pd df = pd.DataFrame([1200.0, 0.0, 1536.0, 1530.0, 0.0], columns=['Occurred Time']) df['Occurred Time'] = df['Occurred Time'].astype(int).apply( lambda x: f"{x:04d}"[:2] + ':' + f"{x:04d}"[2:] + ':00' ) print(df)
方法3:转为datetime对象再格式化(适合需时间运算场景)
如果后续需要对时间进行运算,可先转为datetime对象,再格式化字符串:
import pandas as pd df = pd.DataFrame([1200.0, 0.0, 1536.0, 1530.0, 0.0], columns=['Occurred Time']) # 解析为datetime对象 df['Occurred Time'] = pd.to_datetime( df['Occurred Time'].astype(int).astype(str).str.zfill(4), format='%H%M' ) # 格式化为HH:MM:SS字符串 df['Occurred Time'] = df['Occurred Time'].dt.strftime('%H:%M:%S') print(df)
内容的提问来源于stack exchange,提问作者Athina Papageorgiou
相关产品推荐
相关产品推荐

