雪花写入未正确插入日期

2024-09-28 22:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“df”的pandas数据框架,我正在使用针对Netezza数据库的SQL查询结果创建它。我在Jupyter笔记本电脑公司工作。dataframe有两行,其中两列(CREATEDDATE和STAGEDATE)包含日期时间值。当我运行print(df)时,结果如下所示:

                   ID ISDELETED            PARENTID         CREATEDBYID  \
0  017o000003tQRftAAG     false  a0no000000Hrv1IAAR  005o0000001w8wgAAA   
1  017o000003jl52cAAA     false  a0no000000GszDUAAZ  005o0000001w2pTAAQ   

          CREATEDDATE    FIELD OLDVALUE NEWVALUE  STAGEDATE  
0 2015-07-30 14:51:41  created     None     None 2016-06-06  
1 2015-07-16 14:48:37  created     None     None 2016-06-06

如果运行print(df.dtypes),结果如下:

ID                     object
ISDELETED              object
PARENTID               object
CREATEDBYID            object
CREATEDDATE    datetime64[ns]
FIELD                  object
OLDVALUE               object
NEWVALUE               object
STAGEDATE      datetime64[ns]
dtype: object

因此,据我所知,我的datetime列的格式正确,可以使用write_()写入Snowflake。然而,在我这样做之后,雪花的日期就大不相同了: enter image description here

例如,2016-06-06的阶段值现在是48399-06-06。有人知道如何解决这个问题吗?我正在使用pyodbc和df=cs.execute()从Netezza执行拉取操作,以填充数据帧。我正在导入并使用snowflake.connector连接到snowflake,并正在运行以下操作以获得write\u pandas:

from snowflake.connector.pandas_tools import write_pandas

Tags: 数据noneidpandasdfobjectwriteprint
1条回答
网友
1楼 · 发布于 2024-09-28 22:23:51
SELECT '2016-06-06'::timestamp as a
    ,to_timestamp_ntz(date_part('epoch_second', a),0)::date as a_s
    ,to_timestamp_ntz(date_part('epoch_millisecond', a),0)::date as a_ms
    ,to_timestamp_ntz(date_part('epoch_millisecond', a),3)::date as b_ms;

给予

A                        A_S          A_MS         B_MS
2016-06-06 00:00:00.000  2016-06-06   48399-06-06  2016-06-06

这就是说,你的日期,变成了历元毫秒,并解析为秒,表示你的日期

所以你可以扔掉毫秒,或者改变日期的解析方式

相关问题 更多 >