SQL转Pandas实现时Python sum()函数传参报错如何解决
报错原因
Python内置sum()函数最多支持2个入参:第一个为待求和的可迭代对象,第二个为可选的累加初始值。直接将5个独立的列求和结果作为入参传入外层sum(),不符合函数参数要求,因此触发类型错误。
原SQL的计算逻辑为:
- 对表中
x/y/z/r/t五个字段分别计算列总和 - 将5个列的总和再次相加,得到最终结果存入变量
m
按照示例数据计算,最终正确结果为110.0。
实现代码
原生Python修正版
将各列的求和结果封装为列表/元组这类可迭代对象,再传入外层sum()即可:
x=(2.2,2.2,2.2,2.2,2.2) y=(3.3,3.3,3.3,3.3,3.3) z=(4.4,4.4,4.4,4.4,4.4) r=(5.5,5.5,5.5,5.5,5.5) t=(6.6,6.6,6.6,6.6,6.6) m = sum([sum(x), sum(y), sum(z), sum(r), sum(t)]) print(m)
Pandas等价实现(对应SQL表查询逻辑)
SQL中from _fx_ght代表从结构化表中读取数据计算,Pandas中先将源数据构造为DataFrame(对应数据库表结构),再按逻辑计算:
import pandas as pd # 构造与_fx_ght表对应的DataFrame df = pd.DataFrame({ 'x': (2.2,2.2,2.2,2.2,2.2), 'y': (3.3,3.3,3.3,3.3,3.3), 'z': (4.4,4.4,4.4,4.4,4.4), 'r': (5.5,5.5,5.5,5.5,5.5), 't': (6.6,6.6,6.6,6.6,6.6) }) # 两层sum完全对应SQL逻辑:内层求每列总和,外层将列总和相加 m = df[['x', 'y', 'z', 'r', 't']].sum().sum() print(m)
也可以使用更简洁的等价写法,计算结果完全一致:
# 直接对所有字段的所有值求和 m = df[['x', 'y', 'z', 'r', 't']].to_numpy().sum()
内容的提问来源于stack exchange,提问作者anjan paul
相关产品推荐
相关产品推荐

