如何使用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)
关键调整说明
- 修正了日期格式符的顺序和占位符,完全匹配你预期的输出格式
- 先把原表
RawMonth列转为datetime类型,再通过.dt.strftime格式化为你需要的字符串格式,保证每行的日期对应原表的原始值 - 删掉了错误的赋值语法,直接给DataFrame赋值新列的写法更简洁易读
- 补充了多文件处理的存储逻辑,按需使用即可
内容的提问来源于stack exchange,提问作者Trunks
相关产品推荐
相关产品推荐

