strptime参数类型错误:Excel日期处理Python脚本运行异常排查
解决TypeError: strptime() argument 1 must be str, not datetime.datetime的问题
问题根源
- 错误的转换逻辑:你在循环里不管
c是字符串还是datetime对象,都直接调用datetime.strptime(c, '%d/%m/%Y %H:%M:%S'),但strptime仅能接收字符串参数,当c已经是datetime类型时就会触发该报错。 - 混用库的API:你用
pandas.read_excel得到的是DataFrame对象,但后续调用的cell、save是openpyxl工作簿的方法,两者不能混用,这会导致额外的操作错误。 - 低效的保存方式:循环内每次迭代都保存Excel,不仅效率低,还可能导致文件锁定问题。
修正后的代码
import pandas as pd from datetime import datetime # 读取Excel文件,保留日期列的原始类型 df = pd.read_excel(r'D:\Maintenance\Bloc 6\PROJECT KPI\COPIL\test.xlsx', sheet_name="Sheet1") def format_date(date_val): # 处理字符串类型的日期 if isinstance(date_val, str): dt_obj = datetime.strptime(date_val, '%d/%m/%Y %H:%M:%S') print(dt_obj) return dt_obj.strftime('%x %X') # 处理pandas Timestamp或原生datetime类型的日期 elif isinstance(date_val, (pd.Timestamp, datetime)): dt_obj = pd.to_datetime(date_val) print(dt_obj) return dt_obj.strftime('%x %X') # 其他类型返回原值 else: return date_val # 将格式化后的日期写入新列(若需写入相邻的第二列,可直接指定列名或位置) df['formatted_date'] = df['date'].apply(format_date) # 一次性保存处理后的结果到Excel df.to_excel(r'D:\Maintenance\Bloc 6\PROJECT KPI\COPIL\test.xlsx', sheet_name="Sheet1", index=False)
关键改动说明
- 类型判断前置:先判断日期值的类型,仅对字符串调用
strptime转换,避免对已有的datetime对象重复转换。 - 统一用pandas操作:利用pandas的
apply批量处理列数据,to_excel一次性保存结果,避免混用不同库的API。 - 兼容pandas Timestamp:pandas读取Excel时会自动将日期识别为
Timestamp类型,因此判断条件包含该类型,确保所有日期格式都能被正确处理。 - 高效保存:处理完所有数据后再保存Excel,提升运行效率。
内容的提问来源于stack exchange,提问作者Anouar_S
相关产品推荐
相关产品推荐

