【发布时间】:2018-07-07 17:34:49
【问题描述】:
我使用 Python 从网络上抓取了一些棒球数据,并将其保存在 Pandas 数据框中。其中一列包含数字播放器识别代码,但它通常为空。因为 Pandas 整数列不能包含 NaN,所以当我将数据导出到 csv 时,该列已转换为浮点数并保存为浮点数。
当我尝试在 MS SQL Server 数据库中运行批量插入时,这会导致问题,因为相关列被定义为“INT”类型(并且还包含对另一个表的外键约束)。引发以下错误消息:
批量加载数据转换错误(类型不匹配或无效字符 对于指定的代码页)
我尝试了here 提供的建议,但似乎更改浮点数的格式并不能解决问题,SQL Server 仍然抛出相同的错误。
我知道像 pyodbc 这样的包提供了一种将数据传输到数据库的替代方式,但是我的数据框非常大(大约 6M 行,70 列),我发现这个过程太慢了,至少相比保存到 csv 并导入。
我怎样才能最好地解决这个问题?最终,我并不热衷于保存到 csv 并在 SQL Server 中使用批量插入,但我确实想要一种同样快速的方法。
【问题讨论】:
-
你考虑过通过
pyodbc-stackoverflow.com/a/29649340/4098013直接从python批量插入数据吗? -
我没有考虑过...但是它会解决问题吗?我需要从 pandas 中缺少值的列中插入整数...鉴于 pandas 无法将此字段存储为整数,当我使用 pyodbc 插入时,我肯定会遇到同样的问题吗?
-
你可以通过使用
-9999999(你永远不会在数据中看到的值)来填补缺失值,然后尝试更新
标签: python sql sql-server pandas csv