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

按Total_Stops分组用均值填充Price空值报错,求解决

解决AttributeError: 'float' object has no attribute 'fillna'问题

错误根源很明确:当你用df.apply(fun1, axis=1)时,传入函数fun1的x是DataFrame的单行数据,此时x['Price']是单个float类型的值(不是Series对象),而fillna是pandas的Series/DataFrame专属方法,单个数值自然没有这个属性,所以触发报错。

方案1:修改原函数,直接判断并替换空值

既然x['Price']是单个值,那就直接判断它是否为空,再返回对应填充值即可,同时修正原函数的缩进错误:

import pandas as pd

def fun1(x):
    # 先判断Price是否为空
    if pd.isna(x['Price']):
        if x['Total_Stops'] == 'non-stop':
            return 5024.90
        elif x['Total_Stops'] == '1 stop':
            return 10594.12
        elif x['Total_Stops'] == '2 stops':
            return 12712.36
        elif x['Total_Stops'] == '3 stops':
            return 13112
        elif x['Total_Stops'] == '4 stops':
            return 17686
        else:
            return x['Price']
    # Price不为空时直接返回原值
    else:
        return x['Price']

df['Price'] = df.apply(fun1, axis=1)

方案2:用分组填充(更高效的pandas风格写法)

逐行apply效率较低,尤其是处理大数据集时,推荐用groupby结合映射字典来批量填充:

# 先定义Total_Stops对应填充均值的映射字典
stop_price_map = {
    'non-stop': 5024.90,
    '1 stop': 10594.12,
    '2 stops': 12712.36,
    '3 stops': 13112,
    '4 stops': 17686
}

# 按Total_Stops分组后,对每组的Price列填充对应均值
df['Price'] = df.groupby('Total_Stops')['Price'].apply(
    lambda s: s.fillna(stop_price_map[s.name])
)

这种方法利用pandas的向量化操作,比逐行apply快得多,代码也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:22:42