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

如何正确使用pd.isna避免类型错误?填充宗教缺失值遇报错

排查用同住户宗教值填充DataFrame缺失值的代码错误

核心错误点梳理

  • isna()调用方式错误:cd.isna(row['Religion'])写法错误,DataFrame.isna()无需额外传参,检查单个标量值的空值应该用pd.isna(row['Religion'])。
  • 函数名不匹配:定义的函数是fill_religion,但调用时写的是fill_missing_religion,名称不一致导致无法正确调用目标函数。
  • get_group()参数格式错误:分组后的get_group()需要传入元组作为分组键,正确写法是grouped_data.get_group((row['House Number'], row['Street'])),而非两个单独参数。
  • 变量名拼写错误:函数内将定义的religions误写为religion(len(religion)、return religion[0]),会触发未定义变量的报错。
  • 未定义变量引用:代码中出现未定义的line变量(line['House Number']),应改为row。

修正后的完整代码

import pandas as pd

def fill_religion(row, grouped_data):
    if pd.isna(row['Religion']):
        home_group = grouped_data.get_group((row['House Number'], row['Street']))
        religions = home_group['Religion'].dropna().unique()
        if len(religions) == 1:
            return religions[0]
        else:
            return 'Unknown'
    else:
        return row['Religion']

# 按住户编号和街道分组
grouped_data = cd.groupby(['House Number','Street'])

# 应用函数填充缺失值
cd['Religion'] = cd.apply(lambda row: fill_religion(row, grouped_data), axis=1)

更高效的替代方案

逐行apply效率较低,针对大数据集可以用pandas原生分组变换方法实现:

def get_group_mode(series):
    modes = series.mode()
    return modes[0] if len(modes) == 1 else 'Unknown'

# 生成每个分组的填充值
fill_values = cd.groupby(['House Number','Street'])['Religion'].transform(get_group_mode)
# 填充缺失值
cd['Religion'] = cd['Religion'].fillna(fill_values)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:04:54