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

Pandas中Timestamp列表序列化后反序列化失败求助

解决Timestamp列表序列化后转字符串的提取与转换问题

问题分析

你遇到的核心问题是正则表达式匹配错误,以及extractall的用法不适合当前场景:

  • 原正则仅匹配单个数字的年/月/日,无法覆盖YYYY-MM-DD格式的日期
  • 未转义正则中的特殊字符(括号),导致匹配失效
  • extractall返回的是结构化DataFrame,不如str.findall直接返回匹配列表便捷

解决方案

以下是修正后的代码步骤:

  1. 导入依赖
import pandas as pd
  1. 示例DataFrame
df = pd.DataFrame({'col':["[]", "[Timestamp('2018-04-24 00:00:00'), Timestamp('2018-05-14 00:00:00'), Timestamp('2018-05-14 00:00:00')]"]})
  1. 提取日期字符串列表
    使用修正后的正则,通过str.findall批量提取每个单元格中的所有时间字符串:
df['time_list'] = df['col'].str.findall(r"Timestamp\('(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})'\)")
  • 正则解释:Timestamp\('匹配固定前缀,(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})捕获完整的日期时间字符串,'\)匹配后缀
  1. 转换为Timestamp列表
    用apply将字符串列表批量转为Timestamp对象列表:
df['time_list'] = df['time_list'].apply(lambda lst: [pd.to_datetime(t) for t in lst])

验证结果

print(df['time_list'][0])  # 输出:[]
print(df['time_list'][1])  # 输出:[Timestamp('2018-04-24 00:00:00'), Timestamp('2018-05-14 00:00:00'), Timestamp('2018-05-14 00:00:00')]

预防方案(避免后续踩坑)

下次序列化DataFrame时,建议用JSON格式存储时间列表,避免正则匹配的麻烦:

  • 存储时:
import json
df['col'] = df['col'].apply(lambda lst: json.dumps([t.isoformat() for t in lst]))
df.to_csv('data.csv', index=False)
  • 读取时:
df = pd.read_csv('data.csv')
df['col'] = df['col'].apply(lambda s: [pd.to_datetime(t) for t in json.loads(s)])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:27:47