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

strptime参数类型错误:Excel日期处理Python脚本运行异常排查

解决TypeError: strptime() argument 1 must be str, not datetime.datetime的问题

问题根源

  1. 错误的转换逻辑:你在循环里不管c是字符串还是datetime对象,都直接调用datetime.strptime(c, '%d/%m/%Y %H:%M:%S'),但strptime仅能接收字符串参数,当c已经是datetime类型时就会触发该报错。
  2. 混用库的API:你用pandas.read_excel得到的是DataFrame对象,但后续调用的cell、save是openpyxl工作簿的方法,两者不能混用,这会导致额外的操作错误。
  3. 低效的保存方式:循环内每次迭代都保存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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:29