如何在将数据写入Snowflake数据库后避免出现Invalid Date错误

编程语言 2026-07-12

我有一个名为 "df" 的Pandas DataFrame。该数据框有两列(CREATEDDATE和 LASTMODIFIEDDATE),其中包含日期时间值。当我尝试使用这个df将数据插入Snowflake数据库时,日期时间值变成了 - Invalid date。
下面是我在插入前使用的代码。我到底哪里做错了?
重要说明——我在插入时使用 write_pandas()。

CREATEDDATE和 LASTMODIFIEDDATE的类型都是TIMESTAMP_TNZ

current_datetime = pd.Timestamp.utcnow().tz_localize(None)

    df[CREATEDDATE_COL_NAME] = current_datetime
    df[LASTMODIFIEDDATE_COL_NAME] = current_datetime
    df = df.convert_dtypes()

解决方案

发生了什么:

  1. pd.Timestamp.utcnow() 返回一个带时区的时间戳(UTC)。
  2. 然后你执行 .tz_localize(None),使之变成无时区的时间戳。
  3. 但你的Snowflake列是 TIMESTAMP_TNZ(带时区的时间戳)。如果 write_pandas() 看到字符串/对象或无法干净映射到TNZ的数据类型,它可能会以Snowflake无法解析的方式进行序列化 → Invalid date

推荐的修复方法:

import pandas as pd

current_datetime = pd.Timestamp.now(tz="UTC")   # tz-aware

df[CREATEDDATE_COL_NAME] = current_datetime
df[LASTMODIFIEDDATE_COL_NAME] = current_datetime

# Ensure proper datetime dtype (not object/string)
df[CREATEDDATE_COL_NAME] = pd.to_datetime(df[CREATEDDATE_COL_NAME], utc=True)
df[LASTMODIFIEDDATE_COL_NAME] = pd.to_datetime(df[LASTMODIFIEDDATE_COL_NAME], utc=True)

# Avoid convert_dtypes() here
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章