Python中用pandasql执行SQL查询遇TypeError: schema参数重复赋值错误
解决pandasql执行SQL时的
TypeError: __init__() got multiple values for argument 'schema'错误 问题场景
之前一直用pandasql编译SQL查询都正常,现在运行以下代码时触发上述错误:
from pandasql import sqldf import pandas as pd from sklearn import datasets Q10="select bucket,count(*) as COUNT,min(probability) as MINSCORE,max(probability) as MAXSCORE,(avg(probability)*100) as PREDDEFRATE,sum(response) as RESPONSE,count(*)-sum(response) as NONRESPONSE from score group by 1;" Bucket_Details = sqldf(Q10,globals()) display(Bucket_Details)
错误信息:
TypeError: init() got multiple values for argument 'schema'
错误原因
核心原因是pandasql与当前pandas版本不兼容:新版本pandas调整了SQLAlchemy相关的参数传递逻辑,旧版pandasql未适配该变化,导致调用时重复传入schema参数,触发参数冲突错误。
另外注意:原代码中未定义score DataFrame,这也是潜在的运行问题(需确保该数据集已正确加载)。
修复方案
方案1:升级pandasql到最新适配版本
执行以下命令更新pandasql:
pip install --upgrade pandasql
方案2:降级pandas到兼容版本
如果不想升级pandasql,可将pandas降级到与当前pandasql兼容的稳定版本(比如1.5.x系列):
pip install pandas==1.5.3
补充:确保数据集正确定义
原代码缺失score数据集的定义,这里补充模拟代码(可根据实际业务替换):
# 模拟生成符合SQL查询结构的score数据集 data = datasets.make_classification(n_samples=1000, n_features=5, random_state=42) score = pd.DataFrame({ 'bucket': pd.cut(pd.Series(data[0][:,0]), bins=5, labels=['1','2','3','4','5']), 'probability': pd.Series(data[0][:,1]), 'response': pd.Series(data[1]) })
验证代码
将补充后的完整代码运行,即可正常执行SQL查询:
from pandasql import sqldf import pandas as pd from sklearn import datasets # 生成模拟数据集 data = datasets.make_classification(n_samples=1000, n_features=5, random_state=42) score = pd.DataFrame({ 'bucket': pd.cut(pd.Series(data[0][:,0]), bins=5, labels=['1','2','3','4','5']), 'probability': pd.Series(data[0][:,1]), 'response': pd.Series(data[1]) }) Q10="select bucket,count(*) as COUNT,min(probability) as MINSCORE,max(probability) as MAXSCORE,(avg(probability)*100) as PREDDEFRATE,sum(response) as RESPONSE,count(*)-sum(response) as NONRESPONSE from score group by 1;" Bucket_Details = sqldf(Q10, globals()) display(Bucket_Details)
内容的提问来源于stack exchange,提问作者Sai Nandhan Rayapureddy
相关产品推荐
相关产品推荐

