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

Python sum()函数参数错误排查:TypeError最多接受2个参数(传入3个)

问题:按年龄分组Pandas DataFrame时触发TypeError错误

我正在按年龄将Pandas DataFrame分成三个分组:

  • df_20s:age<30
  • df_30s:30≤age<40
  • df_40s:age≥40
    并验证三个分组的行数总和等信息,但运行代码时触发TypeError: sum() takes at most 2 arguments (3 given)错误。

我的代码:

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv('/datasets/height_weight.csv')

df_20s = (df[df['age'] < 30])
df_30s = (df[(df['age'] >= 30) & (df['age'] < 40)])
df_40s = (df[df['age'] >= 40])

# print out the results
print("Sum of data frame lengths:",sum(len(df_20s),len(df_30s),len(df_40s)))
print("Min and max age for df_20s:", df_20s['age'].min(), df_20s['age'].max() )
print("Min and max age for df_30s:", df_30s['age'].min(), df_30s['age'].max() )
print("Min and max age for df_40s:", df_40s['age'].min(), df_40s['age'].max() ) 

报错信息:

TypeError                                 Traceback (most recent call last)
Input In [1], in <cell line: 13>()
     9 df_40s = (df[df['age'] >= 40])
     12 # print out the results
---> 13 print("Sum of data frame lengths:",sum(len(df_20s),len(df_30s),len(df_40s)))
     14 print("Min and max age for df_20s:", df_20s['age'].min(), df_20s['age'].max() )
     15 print("Min and max age for df_30s:", df_30s['age'].min(), df_30s['age'].max() )
TypeError: sum() takes at most 2 arguments (3 given)

错误原因

Python内置的sum()函数仅接受两个参数:第一个是可迭代对象(如列表、元组),第二个是可选的起始值(默认0)。你直接传入三个独立的数值作为参数,超出了函数的参数限制,因此触发TypeError。

修正方案

有两种简单的修复方式:

  1. 将三个长度值放入列表(或元组)后传入sum():
print("Sum of data frame lengths:", sum([len(df_20s), len(df_30s), len(df_40s)]))
  1. 直接使用加法运算符计算总和,更直观:
print("Sum of data frame lengths:", len(df_20s) + len(df_30s) + len(df_40s))

额外优化建议

如果需要更高效的分组操作,可以使用Pandas的groupby结合cut函数,一次性完成分组与统计:

import pandas as pd

df = pd.read_csv('/datasets/height_weight.csv')

# 定义分组区间与标签
age_bins = [0, 30, 40, float('inf')]
group_labels = ['20s', '30s', '40s']
df['age_group'] = pd.cut(df['age'], bins=age_bins, labels=group_labels)

# 按分组统计行数、最小/最大年龄
group_stats = df.groupby('age_group').agg(
    分组行数=('age', 'size'),
    最小年龄=('age', 'min'),
    最大年龄=('age', 'max')
)

print(group_stats)
# 验证分组行数总和
print("分组行数总和:", group_stats['分组行数'].sum())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:30:57