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

如何将Pandas中含Timestamp的字符串列转换为列表类型?

解决Pandas中字符串格式Timestamp数组的时间间隔检查问题

问题分析

你的date_time列存储的是字符串格式的Timestamp数组,ast.literal_eval无法识别Timestamp自定义类型,json.loads则因字符串包含非JSON语法的Timestamp关键字报错。核心思路是先提取纯时间字符串,再转换为可运算的时间对象,最后检查间隔。

解决方案步骤

  • 提取时间字符串:用正则表达式从每个字符串中剥离出Timestamp('xxx')里的时间部分
  • 转换为Timestamp对象:将提取到的时间字符串转为pd.Timestamp,组成可操作的时间列表
  • 检查时间间隔:遍历每个时间列表,计算相邻时间的差值,判断是否所有间隔都≤1分钟

完整代码示例

import pandas as pd
import re

# 读取数据
df = pd.read_csv('data.csv')

# 处理函数:将字符串格式的Timestamp数组转为pd.Timestamp列表
def parse_timestamp_str(s):
    # 匹配所有Timestamp('时间')中的时间字符串
    time_strs = re.findall(r"Timestamp\('(.*?)'\)", s)
    # 转换为Pandas时间对象列表
    return [pd.Timestamp(t) for t in time_strs]

# 应用函数生成时间列表列
df['timestamps'] = df['date_time'].apply(parse_timestamp_str)

# 检查间隔函数:判断列表中所有相邻时间间隔是否≤1分钟
def check_interval(timestamps):
    # 列表长度≤1时无间隔,直接返回符合条件
    if len(timestamps) <= 1:
        return True
    # 计算相邻时间差值,过滤第一个空值
    time_diffs = pd.Series(timestamps).diff().dropna()
    # 验证所有差值是否≤60秒
    return all(time_diffs <= pd.Timedelta(minutes=1))

# 添加检查结果列
df['interval_ok'] = df['timestamps'].apply(check_interval)

# 输出结果示例
print(df[['id', 'interval_ok']])

代码说明

  • re.findall(r"Timestamp\('(.*?)'\)", s):非贪婪匹配确保精准提取每个Timestamp包裹的时间字符串
  • pd.Timestamp(t):将字符串转为Pandas时间对象,支持后续时间差计算
  • pd.Series(timestamps).diff():自动计算相邻时间的差值,dropna()移除第一个无前置时间的空值
  • all(time_diffs <= pd.Timedelta(minutes=1)):批量验证所有时间间隔是否符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:07:41