【发布时间】:2020-07-24 07:56:37
【问题描述】:
第一个 SO 问题。我希望这足够描述性。
熊猫 0.25,甲骨文 11g
我有一个从 csv 读取的数据框。它包含数字、字符串和日期数据的混合。
我使用.astype(str)、.astype(int) 和.to_datetime 强制数据框中的数据类型。
然后我创建一个 dtype 字典来选择我想要的数据类型。
当数字列types.NUMBER 和types.INTEGER 中有一些空值时,会在Oracle 表中创建一个FLOAT。应该是NUMBER(38,0),特别是如果我使用types.INTEGER。定义为 types.NUMBER 并包含所有非空整数的键列按预期创建为 NUMBER(38,0)。
当存在全为空的列,但已应用 .astype(str) 且 dtype 为 types.VARCHAR(300) 时,这些列也在 Oracle 中创建为 FLOAT。
我需要在 to_sql 中使用if_exists='append',因为表会收集历史记录,所以我不能等待 VARCHAR 列接收数据。虽然我在测试期间一直使用if_exists='replace 来确保删除并重新创建表。
有没有办法解决这些问题,由数据中的空值引起,导致数据类型选择不正确?我不应该需要在字符串中使用空格(即'')和整数中的0,我需要空值作为空值。
日期列中的空值,即使整个列都是空值也有效,并根据要求在 Oracle 中创建 DATE。
编辑:字符串到 VARCHAR 问题实际上是一个捕获和错误处理异常的问题。
数字仍然是一个必须单独处理的问题,我将在解决方案中添加答案。
【问题讨论】:
标签: python pandas oracle dtype pandas-to-sql