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

如何将pandas列中字符串列表内的datetime转为指定格式字符串?

解决方案

你的time列存储的是字符串形式的datetime对象列表,而非实际的datetime集合,需要先解析字符串得到真实的datetime列表,再逐个格式化。

方法一:简洁实现(适用于可信数据)

利用eval解析字符串为datetime对象列表,再批量格式化:

import pandas as pd
import datetime

foo = pd.DataFrame({'id': [1,2], 'time' :['[datetime.datetime(2021, 10, 20, 14, 29, 51), datetime.datetime(2021, 10, 20, 14, 46, 8)]', '[datetime.datetime(2021, 10, 20, 15, 0, 44), datetime.datetime(2021, 10, 20, 16, 13, 42)]']})

def format_time_list(time_str):
    # 解析字符串为datetime列表
    dt_list = eval(time_str)
    # 逐个格式化每个datetime对象
    return [dt.strftime('%Y/%m/%d %H:%M:%S') for dt in dt_list]

# 生成格式化后的新列
foo['formatted_time'] = foo['time'].apply(format_time_list)

print(foo)

执行后输出:

id                                                                 time                                     formatted_time
0   1  [datetime.datetime(2021, 10, 20, 14, 29, 51), datetime.datetime(2021, 10, 20, 14, 46, 8)]  [2021/10/20 14:29:51, 2021/10/20 14:46:08]
1   2  [datetime.datetime(2021, 10, 20, 15, 0, 44), datetime.datetime(2021, 10, 20, 16, 13, 42)]  [2021/10/20 15:00:44, 2021/10/20 16:13:42]

方法二:安全实现(适用于不可信数据源)

如果数据来自外部,避免使用eval,改用正则提取datetime参数再构造对象:

import re

def safe_format_time_list(time_str):
    # 匹配datetime的数字参数
    pattern = r'datetime\.datetime\((\d+), (\d+), (\d+), (\d+), (\d+), (\d+)\)'
    matches = re.findall(pattern, time_str)
    # 构造datetime并格式化
    return [datetime.datetime(*map(int, match)).strftime('%Y/%m/%d %H:%M:%S') for match in matches]

foo['formatted_time'] = foo['time'].apply(safe_format_time_list)

注意事项

  • 方法一代码简洁,但仅适合你能确认字符串无恶意代码的场景。
  • 方法二通过正则提取数据,安全性更高,适合处理外部来源的未知数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:31:51