【问题标题】:Save pandas integer dataframe to csv (with missing values) for import into SQL Server将 pandas 整数数据框保存到 csv(缺少值)以导入 SQL Server
【发布时间】: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


【解决方案1】:
pd.fillna(-1)

这会将所有空白值填充为所需值(例如负值)。更多参数见documentation。

【讨论】:

  • 这很有效(并且可以方便地解决我的问题)。然而,pandas 数据框的整数列中不允许缺失值的事实感觉像是缺陷而不是功能。很惊讶这没有改变。
猜你喜欢
  • 2015-01-29
  • 2015-01-27
  • 2022-01-04
  • 1970-01-01
  • 2012-03-13
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多