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

航班延误数据集:如何将HHMM格式int64时间转为datetime对象?

航班延误数据分析的datetime处理问题解答

1. 是否需要将所有数据转为datetime类型?

不需要全部转换。你的核心需求是找出延误最少的月份、日期及时段:

  • 月份(Month)、日期(DayOfMonth)、星期几(DayOfWeek)本身是离散数值类型,直接用原类型分组统计即可,无需转datetime。
  • 仅**CRSDepTime(计划起飞时间)**需要处理成时间格式——因为要划分时段(如早高峰、午间、晚间),转成时间类型后更方便提取小时、归类时段。

2. 能否用pandas的to_datetime()函数?格式怎么设置?

可以用,但要注意你的CRSDepTime是int64类型,直接传入数字会被当成时间戳(1970年起始的秒数),必须先转成字符串并补前导零(比如数字905要转为"0905",才能匹配HHMM的4位格式)。

你之前报错的原因是:部分CRSDepTime数值不足4位(如905转字符串后是"905"),不符合HHMM格式要求(必须是两位小时+两位分钟的4位字符串),因此触发匹配错误。

3. 报错的解决方法

给你两种实用处理方式:

方法一:补前导零后转时间

先将CRSDepTime转为字符串,用str.zfill(4)补前导零至4位,再用to_datetime解析:

# 转字符串补零后解析为时间类型
df['CRSDepTime'] = pd.to_datetime(df['CRSDepTime'].astype(str).str.zfill(4), format='%H%M')

这样1605会转为"1605",905转为"0905",都能匹配%H%M格式。

方法二:直接提取小时(更适配时段分析)

如果仅需划分时段(按小时分组),也可以不用转datetime,直接从数字提取小时:

# 提取小时:1605//100=16,905//100=9
df['DepHour'] = df['CRSDepTime'] // 100
# 处理特殊值:若存在2400则转为0
df['DepHour'] = df['DepHour'].replace(24, 0)

这种方式更高效,直接得到小时数,方便后续分组统计时段延误情况。

后续分析建议

  • 月份/日期/星期几:直接用df.groupby('Month')['延误列'].mean()(或count,取决于你对“延误”的定义)统计,找出均值最小的分组。
  • 时段:用上述方法得到的DepHour,或转datetime后提取df['CRSDepTime'].dt.hour,分组统计延误情况即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:40:32