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

Python3:时间序列数据的日期格式转换问题求助

问题描述

处理超10万行的时间序列DataFrame时遇到日期格式转换问题:

  • 原DataFrame的datetime列格式为%M:%S.%f(分:秒.毫秒)
  • 需要转换为%m/%d/%Y %H:%M:%S.%f格式,以01/01/2023 00:59:57.7作为起始时间,后续时间按序列自动递增(跨小时、天数自动处理)

示例数据

datetime     
0  59:57.7 
1  00:09.7
2  00:21.8 

期望结果

datetime   ProcessTime
59:57.7     01/01/2023 00:59:57.7
00:09.7     01/01/2023 01:00:09.7
00:21.8     01/01/2023 01:00:21.8

尝试的代码

import pandas as pd
from datetime import datetime

# Example dataframe
df = pd.DataFrame({'datetime': ['59:57.7', '00:09.7', '00:21.8']})

first_time_str = df['datetime'][0]
first_time_obj = datetime.strptime(first_time_str, '%M:%S.%f')
formatted_first_time = first_time_obj.replace(year=2023, month=1, day=1).strftime('%m/%d/%Y %H:%M:%S.%f')

df['datetime'][0] = formatted_first_time
解决方案

核心思路是将原始分秒值转换为时间差,计算序列中的时间增量,再基于起始时间累加得到完整时间戳。针对10万行数据,优先使用向量化操作保证效率。

完整代码

import pandas as pd
from datetime import datetime

# 1. 初始化数据
df = pd.DataFrame({'datetime': ['59:57.7', '00:09.7', '00:21.8']})

# 2. 向量化解析原始时间为timedelta(效率远高于apply)
# 给原始字符串加上"00:",让pd.to_timedelta能识别为小时:分:秒.毫秒格式
df['time_delta'] = pd.to_timedelta('00:' + df['datetime'])

# 3. 计算时间增量:处理跨小时的情况
df['delta'] = df['time_delta'].diff()
df.loc[0, 'delta'] = pd.Timedelta(0)  # 第一个值的增量为0
# 当后一个时间的分秒小于前一个,说明跨了1小时,给增量补1小时
mask = df['delta'] < pd.Timedelta(0)
df.loc[mask, 'delta'] += pd.Timedelta(hours=1)

# 4. 计算累计时间增量
df['cumulative_delta'] = df['delta'].cumsum()

# 5. 设置起始时间并生成完整时间戳
start_time = datetime(2023, 1, 1, 0, 59, 57, 700000)  # 对应01/01/2023 00:59:57.7
df['ProcessTime'] = start_time + df['cumulative_delta']

# 6. 格式化为指定字符串(保留一位毫秒,去掉多余的微秒位)
df['ProcessTime'] = df['ProcessTime'].dt.strftime('%m/%d/%Y %H:%M:%S.%f').str[:-3]

# 提取需要的列
final_result = df[['datetime', 'ProcessTime']]
print(final_result)

代码说明

  1. 向量化解析:用pd.to_timedelta替代自定义函数,处理10万行数据时速度更快。
  2. 跨小时处理:通过判断时间差是否为负,自动补1小时增量,解决分秒从59跳转到00的跨小时问题。
  3. 时间累加:基于起始时间加上累计增量,生成连续的完整时间序列。
  4. 格式调整:strftime生成的%f是6位微秒,通过str[:-3]截断为1位毫秒,匹配需求格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:47:54