如何给datetime64类型添加时长?DataFrame计算到达时间陷入死循环
问题分析与解决方案
你的代码问题
你用循环遍历ACTUAL_ELAPSED_TIME的每个值,每次都给整个ARRIVAL列赋值,这会导致两个核心问题:
- 循环完全多余:每次赋值都会覆盖之前的结果,最终
ARRIVAL列只会保留最后一次循环的计算结果 - 效率极低:对大DataFrame来说,这种逐标量的循环操作会让程序运行极慢,看起来像陷入死循环
正确实现方式
Pandas支持矢量化操作,直接对整列进行计算,不需要写循环:
# 将飞行分钟数列转换为时间增量类型 flight_duration = pd.to_timedelta(df['ACTUAL_ELAPSED_TIME'], unit='m') # 计算到达时间列 df['ARRIVAL'] = df['DEPARTURE'] + flight_duration
或者更简洁的一行写法:
df['ARRIVAL'] = df['DEPARTURE'] + pd.to_timedelta(df['ACTUAL_ELAPSED_TIME'], unit='m')
为什么这样可行?
pd.to_timedelta可以直接接收整列整数,把每个值转换成对应的分钟时间增量,返回一个和原列长度一致的TimedeltaSeries- 当datetime类型的列和Timedelta类型的列相加时,Pandas会自动逐行匹配计算,实现高效的矢量化运算,比循环快几个数量级
内容的提问来源于stack exchange,提问作者Fernando Araiza
相关产品推荐
相关产品推荐

