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

使用Pandas将正负整数转换为Timedelta并适配Django DurationField

把Pandas整数列转换为timedelta以适配Django DurationField

没问题,这事儿其实挺直接的,咱们一步步来解决:

首先看你的数据,dep_delay和arr_delay这些正负整数明显代表的是分钟数(航班提前/延误的时长),咱们只需要把这些整数值转换成Pandas的Timedelta类型,就能完美适配Django DurationField支持的datetime.timedelta类型了。

1. 转换整数列为Timedelta

用Pandas自带的pd.to_timedelta()方法就搞定了,指定单位为分钟(unit='m'),正负整数都能被正确处理:

import pandas as pd

# 假设你的DataFrame名为df
df['dep_delay'] = pd.to_timedelta(df['dep_delay'], unit='m')
df['arr_delay'] = pd.to_timedelta(df['arr_delay'], unit='m')

如果你的整数代表的是其他时间单位(比如秒、小时),只需要把unit参数改成对应的s(秒)、h(小时)即可。

2. 存入Django模型

转换后的Pandas Timedelta对象和Python标准库的datetime.timedelta完全兼容,所以你可以直接把这些值赋值给Django模型的DurationField字段,不需要额外做格式转换。比如:

from myapp.models import Flight

# 遍历DataFrame批量创建模型实例
for _, row in df.iterrows():
    flight = Flight(
        date=row['date'],
        dep_time=row['dep_time'],
        dep_delay=row['dep_delay'],  # 直接用转换后的Timedelta值
        arr_time=row['arr_time'],
        arr_delay=row['arr_delay'],
        cancelled=row['cancelled'],
        carrier=row['carrier']
    )
    flight.save()

额外注意点

  • 如果你的数据里存在NaN值,转换后会变成NaT(Not a Time),这时候要确保Django模型的DurationField设置了null=True,否则会报错。你也可以用df['dep_delay'].fillna(pd.Timedelta(0))把空值替换成0时长,或者根据业务需求做其他处理。
  • 验证转换结果:可以打印df['dep_delay'].dtype,如果输出是timedelta64[ns],就说明转换成功了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:29