【问题标题】:pandas to_sql() with NUMERIC data type具有 NUMERIC 数据类型的 pandas to_sql()
【发布时间】:2019-02-16 11:01:34
【问题描述】:

我通过从文件中读取数据并进行一些预处理来加载 Pandas DataFrame - 其中包含几列数字。比如

            value
1     13654654328.4567895
2     NULL
3     54643215587.6875455

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

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

有什么办法可以解决这个问题。希望一切都在 Python 中完成,并且不需要更多的 SQL 脚本。

【问题讨论】:

  • 是否会因为简单地将NULL 值更新为0 而不是"" 而导致任何问题?如果没有,那么我会这样做,然后您就可以毫无问题地导入它们。然后,您还可以将 0 值更新为 NULL
  • 因为原始数据中已经存在0,在这种情况下0与null不同。设置“标志”可能不安全,因为原始数据可以是任意数字。
  • 当你使用数字类型的 to_sql() 时,pandas 应该能够同时处理 nan 和 null 。您是否可以在数据框中存储“NULL”str?这将解释错误消息。
  • 'NULL' str 是什么意思
  • 您的另一个选择是将NULL 的实例替换为实际数据中不会出现的内容。也许-1 会起作用。

标签: python sql sql-server database pandas


【解决方案1】:

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

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

顺便说一句,np.nan 是浮点类型。在 SQL 中,NULL 是“无”类型,在 Python 中相当于无。 "" 和 "NULL" 也将被视为字符串。

【讨论】:

    【解决方案2】:

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

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

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

    您遇到问题是因为您尝试将混合类型发送到数据库。您需要将所有预期的空白值替换为None

    参考文献

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2019-12-21
      • 2021-05-23
      • 2021-07-03
      • 2021-09-27
      • 1970-01-01
      相关资源
      最近更新 更多