具有NUMERIC数据类型的pandas to_sql()

时间:2018-09-11 21:22:46

标签: python sql sql-server database pandas

我通过读取文件并进行一些预处理(其中有几列数字)来加载Pandas DataFrame。例如

            value
1     13654654328.4567895
2     NULL
3     54643215587.6875455

为了不丢失准确性,我计划将其存储为NUMERIC。由于我不希望Pandas将数据转换为float,因此我将其加载为字符串,然后使用df.to_sql()插入SQL。

如果不存在NULL,它将很好地工作。但是,如果它包含null,则无论我将“”或np.nan设置为null,它都将错误报告为“将数据类型nvarchar转换为数值时出错”。似乎它会自动将其转换为空字符串,该字符串无法在SQL Server中转换为NUMERIC。

有什么办法可以解决这个问题。希望可以使用Python完成所有操作,而无需进一步的SQL脚本。

2 个答案:

答案 0 :(得分:1)

我从未使用过.to_sql方法,但我想您需要将None值替换为None值。例如:

df.replace([np.nan], [None], inplace=True)

顺便说一句np.nan是float类型。在SQL中,NULL为“ nothing”类型,在Python中等效为None。 另外,“”和“ NULL”也将被视为字符串。

答案 1 :(得分:0)

我想我会添加更多细节来补充下面的内容...

根据PEP 249 -- Python Database API Specification v2.0

  

SQL NULL值由输入和输出上的Python None单例表示。

您遇到了问题,因为您试图将混合类型发送到数据库。您需要用None

替换所有预期的空白值

参考