【发布时间】:2021-07-10 12:00:29
【问题描述】:
我正在尝试使用 Python 和 Pandas 将几个 .csv 文件加载到 SQL Server 数据库。
当我运行我的代码时,我得到了这个错误:
参数 39 (”“): 提供的值不是浮点数据类型的有效实例。”
我没有 39 个参数...
我将不胜感激!
import pandas as pd
# Import CSV
data = pd.read_csv (r'D:\USA-Data\USA\2007\ORATS_SMV_Strikes_20070103.csv')
df = pd.DataFrame(data, columns= ['ticker','stkPx','expirDate','yte','strike','cVolu','cOi','pVolu','pOi','cBidPx','cValue','cAskPx','pBidPx','pValue','pAskPx','cBidIv','cMidIv','cAskIv','smoothSmvVol','pBidIv','pMidIv','pAskIv','iRate','divRate','residualRateData','delta','gamma','theta','vega','rho','phi','driftlessTheta','extVol','extCTheo','extPTheo','spot_px','trade_date'])
print(df)
# Connect to SQL Server
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=WIN7-PC;'
'Database=USA;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
# Insert DataFrame to Table
for row in df.itertuples():
cursor.execute('''INSERT INTO USA.dbo.USAData([ticker,stkPx,expirDate,yte,strike,cVolu,cOi,pVolu,pOi,cBidPx,cValue,cAskPx,pBidPx,pValue,pAskPx,cBidIv,cMidIv,cAskIv,smoothSmvVol,pBidIv,pMidIv,pAskIv,iRate,divRate,residualRateData,delta,gamma,theta,vega,rho,phi,driftlessTheta,extVol,extCTheo,extPTheo,spot_px,trade_date])VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''',
row.ticker,
row.stkPx,
row.expirDate,
row.yte,
row.strike,
row.cVolu,
row.cOi,
row.pVolu,
row.pOi,
row.cBidPx,
row.cValue,
row.cAskPx,
row.pBidPx,
row.pValue,
row.pAskPx,
row.cBidIv,
row.cMidIv,
row.cAskIv,
row.smoothSmvVol,
row.pBidIv,
row.pMidIv,
row.pAskIv,
row.iRate,
row.divRate,
row.residualRateData,
row.delta,
row.gamma,
row.theta,
row.vega,
row.rho,
row.phi,
row.driftlessTheta,
row.extVol,
row.extCTheo,
row.extPTheo,
row.spot_px,
row.trade_date
)
conn.commit()
【问题讨论】:
-
re: "我没有 39 个参数" – SQL Server 使用
sp_prepexec执行查询,这需要三 (3) 个额外参数,因此查询的第一个参数实际上是sp_prepexec的第四个参数。因此“参数 39”实际上是指查询的第 36 个参数,即spot_px。您的 DataFrame 在该列中至少包含一个值,该值被映射到一个空字符串,并且 SQL Server 拒绝自动将其转换为浮点数。 -
为了更好地组织和维护,您应该避免重复大量的列名。将它们分配/重新排序一次,并使用
DataFrame.columns及其 qmarks 的长度创建准备好的 SQL 语句。如果这些长列表之一减一,则整个查询可能会失败。另外,由于您的错误涉及数据类型,请发布df.dtypes。 -
@GordThompson 谢谢你的帮助,一定要让我走上正确的道路来解决这个问题。如何让 sql 接受空单元格/字符串?
-
不可能,
float数字应该是什么空字符串?
标签: python sql-server pandas sql-insert pyodbc