如何在将数据写入Snowflake数据库后避免出现Invalid Date错误
我有一个名为 "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()
解决方案
发生了什么:
pd.Timestamp.utcnow()返回一个带时区的时间戳(UTC)。- 然后你执行
.tz_localize(None),使之变成无时区的时间戳。 - 但你的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。