【发布时间】:2014-12-22 20:20:45
【问题描述】:
我有一个 Python 应用程序,它使用 pandas 来处理一些 excel 电子表格并将值插入到 oracle 数据库中。
对于具有值的日期单元格,这可以正常工作。对于空日期单元格,我插入了一个 NaT,我认为这会很好,但在 Oracle 中,这正在变成一些奇怪的无效时间,显示为“0001-255-255 00:00:00”(类似于 MAXINT 或 0正在转换为我猜的时间戳?)
In[72]: x.iloc[0][9]
Out[72]: NaT
上面是DataFrame中的一小段数据,你可以看到它是一个NaT。
但这就是我在 Oracle 中看到的......
SQL> select TDATE from TABLE where id=5067 AND version=5;
TDATE
---------
01-NOVEMB
SQL> select dump("TDATE") TABLE where id=5067 AND version=5;
DUMP("TDATE")
--------------------------------------------------------------------------------
Typ=12 Len=7: 100,101,255,255,1,1,1
我尝试使用 df.replace 和/或 df.where 将 NaT 转换为 None,但其中任何一个都出现了各种错误,这似乎暗示替换以这种方式无效。
有什么方法可以确保这些数据存储中空日期的一致性?!
【问题讨论】:
-
如何在数据库中插入日期值?日期列的类型是什么?
-
欢迎来到 Stack Overflow。请查看我的回答,如果您有任何未解决的问题,请在我的回答中发表评论:-)
-
@SylvainLeroux In[231]: x['TDATE'].dtype Out[229]: dtype('
-
我尝试了将近 1/2 小时,但我无法重现该行为(即:“伪造”日期以产生与您相同的“转储”)。您是否使用DataFrame.to_sql 将数据帧发送到数据库?还是别的什么?
-
不,由于太深奥而无法进入,我正在稍微按摩 DataFrame 并实际使用游标直接执行 sql。鉴于您没有看到 .to_sql 的怪异之处,可能值得我测试该方法。如果可行,我可以解决导致我改用光标的问题。
标签: python excel oracle pandas