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

自定义中位数函数应用于数据集时报错的技术咨询

问题分析与解决

错误原因

你用pandas.Series.apply(func_median)时,apply会把列里的每一个单独的float值传给func_median,而非把整个列的列表传入。你的函数第一行就执行n = len(n_num),单个float类型没有len()方法,因此直接触发TypeError。

另外你的自定义函数只有print输出,没有返回值——就算参数问题解决,赋值后的列也会全是None,这也是需要修正的点。

解决方法

场景1:计算整个列的中位数(最常用)

完全不需要自定义函数,直接用pandas自带的median()方法即可:

# 计算列的中位数
col_median = new_df_housing['median_income'].median()
# 若要把该中位数作为新列填充到每一行
new_df_housing['median_income_col'] = col_median

场景2:坚持用自定义函数计算整个列的中位数

直接把列转成列表传给函数,不要用apply:

# 先修改函数,让它返回中位数而非仅打印
def func_median(n_num):
    n = len(n_num)
    n_num.sort() 
    if n % 2 == 0:
        median1 = n_num[n//2]
        median2 = n_num[n//2 - 1]
        median = (median1 + median2)/2
    else:
        median = n_num[n//2]
    return median

# 将列转为列表传入函数
col_median = func_median(new_df_housing['median_income'].tolist())
# 赋值为新列
new_df_housing['median_income_col'] = col_median

场景3:对分组后的子组计算中位数(若这是你的真实需求)

如果想按某些列分组后,为每组计算median_income的中位数,可结合groupby与transform实现:

# 示例:按'housing_type'列分组,每组计算中位数并匹配回原行
new_df_housing['group_median'] = new_df_housing.groupby('housing_type')['median_income'].transform(func_median)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:55:22