航班延误数据集:如何将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
相关产品推荐
相关产品推荐

