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