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

如何编写支持单个数字、列表及Pandas DataFrame的均值计算函数?

跨多类型数据的均值计算函数实现

问题分析

你之前的函数仅支持单个数字输入,要扩展到列表、Pandas DataFrame等类型,核心是先将不同类型的输入统一转换为可计算的数值集合,而非误用**kwargs(**kwargs用于接收关键字参数,你的场景需要的是接收任意位置参数的*args)。

解决方案代码

import pandas as pd
import numpy as np

def mean(*args):
    all_values = []
    for arg in args:
        # 处理单个整数/浮点数(含Numpy数值类型)
        if isinstance(arg, (int, float, np.number)):
            all_values.append(arg)
        # 处理列表、元组、Numpy数组
        elif isinstance(arg, (list, tuple, np.ndarray)):
            # 过滤非数值元素
            all_values.extend([x for x in arg if isinstance(x, (int, float, np.number))])
        # 处理Pandas Series
        elif isinstance(arg, pd.Series):
            # 剔除空值后转换为列表
            all_values.extend(arg.dropna().tolist())
        # 处理Pandas DataFrame
        elif isinstance(arg, pd.DataFrame):
            # 仅保留数值列,扁平化后剔除空值
            numeric_data = arg.select_dtypes(include=[np.number]).stack().dropna()
            all_values.extend(numeric_data.tolist())
        else:
            raise TypeError(f"不支持的数据类型: {type(arg)}")
    
    if not all_values:
        raise ValueError("未提供有效数值")
    
    return sum(all_values) / len(all_values)

代码说明

  1. 参数接收:用*args接收任意数量的位置参数,支持同时传入单个数字、列表、Series等混合类型。
  2. 类型适配:
    • 单个数值直接加入计算集合
    • 可迭代类型(列表/数组)过滤非数值后合并
    • Pandas对象自动剔除空值,仅处理数值部分
  3. 异常处理:无有效数值或传入不支持类型时抛出明确错误,避免静默失败。

测试案例

# 单个数字输入
print(mean(1, 2, 3))  # 输出: 2.0

# 列表输入
print(mean([1, 2, 3, 4]))  # 输出: 2.5

# Pandas Series(含空值)
s = pd.Series([5, 6, np.nan, 7])
print(mean(s))  # 输出: 6.0

# Pandas DataFrame(含非数值列和空值)
df = pd.DataFrame({
    'num1': [10, 20, np.nan],
    'num2': [30, 40, 50],
    'str_col': ['a', 'b', 'c']
})
print(mean(df))  # 输出: 30.0

# 混合类型输入
print(mean(1, [2,3], pd.Series([4,5])))  # 输出: 3.0

关于**kwargs报错的原因

**kwargs的作用是接收关键字参数(如mean(a=1, b=2)),而你的需求是传入位置参数(单个值、列表等),强行使用**kwargs会导致位置参数无法被解析,从而抛出参数不匹配的错误,改用*args即可解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:53:21