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

如何使用Python转换字符串为日期?pandas日期格式转换问题求助

问题排查

你的代码存在以下几类问题:

  • 语法错误:df1.insert(...) = pd.to_datetime(...)属于非法赋值语法,insert方法是直接往DataFrame插入列,不需要后面加等号赋值
  • 逻辑错误:pd.to_datetime的作用是将其他类型转为pandas内置的datetime类型,如果你要输出指定格式的字符串类日期,需要调用datetime类型的.dt.strftime()方法做格式化
  • 格式符错误:你定义的CRD_DateFormat = '%m-%b'是「数字月-月份缩写」,和你预期的SEP-01(月份缩写-日期)格式完全不匹配,也缺少了日期的占位符
  • 业务逻辑不符:你原代码把从文件名解析的同一个日期RDate赋值给所有行,会导致所有行的日期都相同,和你预期的每行不同日期的输出不符,你实际需要转换的是原表中的RawMonth列
  • 命名不匹配:你插入的第二列列名是CRDDate,和你预期的列名CRDMonth不一致

修正后完整代码

import pandas as pd
import os
from datetime import datetime

# 按预期输出调整格式符
RD_DateFormat = '%d-%b-%y' # 对应格式:日期-月份缩写-两位年份,比如01-SEP-20
CRD_DateFormat = '%b-%d' # 对应格式:月份缩写-日期,比如SEP-01

# 如果需要处理多个Excel并保留所有结果,先定义空列表存储
all_processed_dfs = []

for excel_file in excel_files:
    # 解析文件名的逻辑保留,如果你不需要可以删掉
    sheet = os.path.basename(excel_file)
    sheet = sheet.split("_")[1]
    sheet = sheet.split(".")[0] 
    RDate = datetime.strptime(sheet, RD_DateFormat) 
    
    df1 = pd.read_excel(excel_file)
    # 转换RawMonth列为datetime类型
    df1['temp_date'] = pd.to_datetime(df1['RawMonth'], format=RD_DateFormat)
    # 生成需要的两个日期列
    df1['RMonth'] = df1['temp_date'].dt.strftime(RD_DateFormat)
    df1['CRDMonth'] = df1['temp_date'].dt.strftime(CRD_DateFormat)
    # 删除临时列
    df1 = df1.drop('temp_date', axis=1)
    
    all_processed_dfs.append(df1)

# 如果需要合并所有Excel的处理结果,打开下面的注释
# final_df = pd.concat(all_processed_dfs, ignore_index=True)
# final_df.to_excel("全部处理结果.xlsx", index=False)

# 仅输出最后一个Excel的处理结果就用下面的代码
df1.to_excel("单文件处理结果.xlsx", index=False)

关键调整说明

  1. 修正了日期格式符的顺序和占位符,完全匹配你预期的输出格式
  2. 先把原表RawMonth列转为datetime类型,再通过.dt.strftime格式化为你需要的字符串格式,保证每行的日期对应原表的原始值
  3. 删掉了错误的赋值语法,直接给DataFrame赋值新列的写法更简洁易读
  4. 补充了多文件处理的存储逻辑,按需使用即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:09:01