如何将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
相关产品推荐
相关产品推荐

