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

Pandas DataFrame datetime列调用strftime转字符串时出现TypeError错误求助

解决pandas datetime列转字符串时的TypeError问题

我来帮你拆解问题根源,再给出高效的解决办法:

错误原因

你直接调用datetime.strftime()的写法有问题——这个方法必须被具体的datetime实例调用(比如某个时间对象.strftime(格式字符串)),但你用apply(axis=1)时,是把整行的Series对象传给了这个函数,这就导致类型完全不匹配:strftime期望接收datetime实例,结果收到了Series(过程中被识别为类似str的对象),所以抛出了那个报错。

而且更关键的是,pandas处理datetime列有专门的高效工具,完全没必要用apply(axis=1)这种逐行处理的低效率方式。

正确解决方案(推荐)

使用pandas的.dt访问器,它是专门为datetime类型的Series/列设计的,可以直接对整列批量操作,效率比apply高很多:

# 先定义需要转换的datetime列列表
datetime_cols = ['startedAt','lastUpdatedAt', 'dataPullStartTime', 'dataPullEndTime']
# 用.dt.strftime批量转换为指定格式的字符串
test_df[datetime_cols] = test_df[datetime_cols].dt.strftime('%Y-%m-%d %H:%M:%S.%f')

特殊场景下的apply写法(不推荐)

如果因为某些特殊需求必须用apply,那需要在lambda里对每个元素单独调用strftime:

datetime_cols = ['startedAt','lastUpdatedAt', 'dataPullStartTime', 'dataPullEndTime']
test_df[datetime_cols] = test_df[datetime_cols].apply(
    lambda col: col.apply(lambda dt: dt.strftime('%Y-%m-%d %H:%M:%S.%f'))
)

或者逐行处理的写法:

test_df[datetime_cols] = test_df[datetime_cols].apply(
    lambda row: row.apply(lambda dt: dt.strftime('%Y-%m-%d %H:%M:%S.%f')),
    axis=1
)

额外提示

你的datetime列是带本地时区的(tzlocal()),如果需要在转换后的字符串中保留时区信息,可以把格式字符串改成'%Y-%m-%d %H:%M:%S.%f %z',这样输出的字符串会包含时区偏移量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:57:31