如何在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
相关产品推荐
相关产品推荐

