You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将Snowflake上传的00YY格式日期转为20XX格式?

解决Snowflake导出日期「00YY-MM-DD」转「20YY-MM-DD」的问题

需求说明

从Snowflake获取的日期列ORDER_DATE格式为0022-10-02,需要批量转换为2022-10-02格式的NEW_DATE列。

现有代码问题分析

第一种方法失效原因

df["ORDER_DATE"] = pd.to_datetime(df["ORDER_DATE"], format='%YYYY%mm%dd', errors='ignore')
def swap(x): return re.sub("^00", "20", x) if type(x) is str else x
df.applymap(swap)
print(df)
  1. pd.to_datetime的format参数错误:正确格式符应为%Y%m%d,而非%YYYY%mm%dd;加上errors='ignore'会导致转换失败时直接保留原字符串,无法修正年份。
  2. df.applymap(swap)执行后未赋值回原DataFrame,原数据不会被修改,需改为df = df.applymap(swap)。

第二种方法无法自动化的原因

df["ORDER_DATE"] = pd.DataFrame({"ORDER_DATE": ["10-02-22", "10-02-22"] })
df.apply(lambda x:x.replace("^00", "20", regex=True))
print(df)

手动硬编码测试数据,未对接从Snowflake读取的真实数据源,无法实现自动化转换;且针对单列处理时,使用str.replace比apply更直接高效。

可行解决方案

方案1:Python端字符串批量替换(适用于字符串类型日期)

直接对ORDER_DATE列执行开头00的替换,生成NEW_DATE列:

# 假设df是从Snowflake读取后的DataFrame
df["NEW_DATE"] = df["ORDER_DATE"].str.replace(r'^00', '20', regex=True)

# 若需直接修改原列
# df["ORDER_DATE"] = df["ORDER_DATE"].str.replace(r'^00', '20', regex=True)

方案2:转换为datetime类型(更规范,支持后续日期运算)

先修正年份字符串,再转换为datetime类型,如需保留字符串格式可再格式化:

# 转换为datetime类型
df["NEW_DATE"] = pd.to_datetime(df["ORDER_DATE"].str.replace(r'^00', '20', regex=True))

# 若需保留YYYY-MM-DD字符串格式
df["NEW_DATE"] = pd.to_datetime(df["ORDER_DATE"].str.replace(r'^00', '20', regex=True)).dt.strftime('%Y-%m-%d')

方案3:Snowflake端SQL预处理(更高效)

在读取数据时直接用SQL修正日期,避免Python端额外处理:

SELECT 
    ORDER_DATE,
    REPLACE(ORDER_DATE, '00', '20', 1) AS NEW_DATE
FROM YOUR_TABLE_NAME;

REPLACE的第四个参数1表示仅替换第一个出现的00,避免误改日期中其他位置的字符。

内容的提问来源于stack exchange,提问作者mikestacker487

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:01:14