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。
修正方案
有两种简单的修复方式:
- 将三个长度值放入列表(或元组)后传入
sum():
print("Sum of data frame lengths:", sum([len(df_20s), len(df_30s), len(df_40s)]))
- 直接使用加法运算符计算总和,更直观:
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
相关产品推荐
相关产品推荐

