我通过读取文件并进行一些预处理(其中有几列数字)来加载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脚本。
答案 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