如何合并日期、开球时间与时长列生成事件时间列?
看起来你已经搞定了日期和开球时间的合并,接下来只需要把time列的时长加到合并后的时间上,再调整格式就能得到目标结果啦!我给你两种常用场景的解决方案:
用Pandas处理(推荐,适合表格数据)
如果你的数据是在Pandas DataFrame里,这是最便捷的方式:
import pandas as pd # 先构造你的示例数据 data = { 'kickoffDate': ['8/6/2017','8/6/2017','8/6/2017'], 'kickoffTime': ['15:00:00','15:00:00','15:00:00'], 'time': ['51:48:00','86:05:00','10:04'] } df = pd.DataFrame(data) # 1. 合并日期和开球时间为datetime对象 df['kickoff_datetime'] = pd.to_datetime(df['kickoffDate'] + ' ' + df['kickoffTime'], format='%m/%d/%Y %H:%M:%S') # 2. 自定义函数解析time列,转成时间差(timedelta) def parse_time_delta(time_str): parts = time_str.split(':') if len(parts) == 2: mins, secs = map(int, parts) elif len(parts) == 3: # 处理带多余秒位的情况,比如'51:48:00' mins, secs, _ = map(int, parts) else: raise ValueError(f"无法解析的时间格式: {time_str}") return pd.Timedelta(minutes=mins, seconds=secs) df['time_delta'] = df['time'].apply(parse_time_delta) # 3. 合并时间并格式化目标字符串 df['eventdatetime'] = (df['kickoff_datetime'] + df['time_delta']).dt.strftime('%d-%m-%Y %H:%M:%S') # 查看结果 print(df['eventdatetime'].tolist()) # 输出: ['06-08-2017 15:51:48', '06-08-2017 16:26:05', '06-08-2017 15:10:04']
纯Python处理列表数据
如果只是处理原生列表,用datetime模块就能搞定:
from datetime import datetime, timedelta kickoffDate = ['8/6/2017','8/6/2017','8/6/2017'] kickoffTime = ['15:00:00','15:00:00','15:00:00'] time_list = ['51:48:00','86:05:00','10:04'] eventdatetime = [] for date_str, kickoff_str, delta_str in zip(kickoffDate, kickoffTime, time_list): # 合并日期和开球时间 kickoff_dt = datetime.strptime(f"{date_str} {kickoff_str}", "%m/%d/%Y %H:%M:%S") # 解析time列的时长 parts = delta_str.split(':') if len(parts) == 2: mins, secs = map(int, parts) elif len(parts) == 3: mins, secs, _ = map(int, parts) else: raise ValueError(f"无法解析的时间格式: {delta_str}") # 计算最终时间并格式化 final_dt = kickoff_dt + timedelta(minutes=mins, seconds=secs) eventdatetime.append(final_dt.strftime("%d-%m-%Y %H:%M:%S")) print(eventdatetime) # 输出: ['06-08-2017 15:51:48', '06-08-2017 16:26:05', '06-08-2017 15:10:04']
关键说明
- 你的
time列格式有点混合(有的带秒位后缀,有的没有),所以加了判断逻辑兼容两种格式; - 日期格式从
MM/DD/YYYY转成了DD-MM-YYYY,是通过strftime的%d-%m-%Y参数实现的; - 时长超过60分钟的情况(比如86分钟)会自动转换成小时+分钟,
datetime和timedelta会帮你处理进位,不用手动计算。
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

