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

如何在DataFrame列上应用自定义函数填充NaN值并根据起降时间计算填充air_time字段

解决方法:用自定义函数填充air_time的NaN值

我刚好处理过类似的场景,用Pandas配合你的自定义函数就能完美解决这个问题,具体步骤和代码如下:

1. 导入必要的库

首先确保你已经导入了Pandas和datetime模块(你的自定义函数依赖datetime):

import pandas as pd
import datetime

2. 定义你的自定义函数

直接用你提供的函数即可,我加了点注释方便理解逻辑:

def get_air_time(dep_time, arr_time):
    # 将HHMM格式的起飞/到达时间转换为分钟数的timedelta对象
    converted_dep_time = datetime.timedelta(minutes=(dep_time // 100) * 60 + (dep_time % 100))
    converted_arr_time = datetime.timedelta(minutes=(arr_time // 100) * 60 + (arr_time % 100))
    # 计算时间差并转换为分钟数,取绝对值处理跨天的特殊情况
    delta = converted_arr_time - converted_dep_time
    return abs(delta.total_seconds() / 60)

3. 对数据集进行填充操作

假设你的数据集是Pandas DataFrame格式,命名为df,我们只需要定位air_time为NaN的行,逐行应用函数计算并赋值:

# 筛选air_time为空的行,应用自定义函数填充
df.loc[df['air_time'].isna(), 'air_time'] = df.loc[df['air_time'].isna()].apply(
    lambda row: get_air_time(row['dep_time'], row['arr_time']), axis=1
)

一些注意事项

  • 确保dep_time和arr_time是数值类型(int/float),如果是字符串格式,需要先转换(比如int(row['dep_time'])),否则会触发类型错误。
  • 函数里的abs()是为了处理到达时间跨天的情况(比如起飞时间2359,到达时间0010),这样计算出来的飞行时间会是正确的11分钟。

内容的提问来源于stack exchange,提问作者Audrius Šaučiūnas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:17:45