INSERT INTO SQL Server 表错误:提供的值不是数据类型 float 的有效实例[重复]

问题描述 投票:0回答:1

我有一个通过阅读电子邮件附件创建的 Pandas df。当插入 SQL Server 表时,我看到参数 6(即“调用长度”列)出现以下错误:

参数 6 (""):提供的值不是数据类型 float 的有效实例。检查源数据是否存在无效值。无效值的一个示例是小数位数大于精度的数字类型数据。

最初呼叫长度是一种时间增量数据类型,但我尝试转换为浮点数。在SQL Server表中显示为十进制(18,2)并以秒为单位显示

我尝试过这样转换:

df['Call Length'] = df['Call Length'].dt.total_seconds().astype(float).round(2)
print(df['Call Length'].dtype) #float64

从我所看到的来看,没有 null 或空行,只有大约 70 行。

然后我只是重命名列:

df_selected = df_selected.rename(columns={
    'From Name': 'FromName',
    'From Number': 'FromNumber',
    'To Name': 'ToName',
    'To Number': 'ToNumber',
    'Call Length': 'CallLength',
    'Call Start Time': 'CallStartTime',
    'Call Direction': 'CallDirection',
})

然后插入表中,这就是我看到错误的地方

insert_nonqueue = f"""
INSERT INTO marketing.Test(FromName, FromNumber, ToName, ToNumber, Result, CallLength,
       CallStartTime, CallDirection)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
"""

 for index, row in df_selected.iterrows():
    cursor.execute(insert_nonqueue, row['FromName'], row['FromNumber'], row['ToName'], row['ToNumber'], row['Result'], row['CallLength'], row['CallStartTime'], row['CallDirection'])

conn.commit()

尝试转换之前的呼叫长度数据帧 col 示例:

0    0 days 00:00:37
1    0 days 00:00:20
2    0 days 00:01:09
3    0 days 00:00:45
4    0 days 00:00:27
Name: Call Length, dtype: timedelta64[ns]
python sql sql-server pandas sql-insert
1个回答
0
投票

这解决了问题:

df_selected = df_selected.fillna(value=0)

通过这个答案找到了解决方案: https://stackoverflow.com/a/53987910/11578869

© www.soinside.com 2019 - 2024. All rights reserved.