如何将pandas中ISO格式时间戳字符串转为时间类型并计算行间时间差
实现方案
首先说明你提到的后缀Z是ISO时间格式中代表UTC零时区的标识,pandas的时间转换函数可以直接识别,不需要手动删除处理。
步骤1:将字符串列转换为timestamp类型
使用pandas内置的pd.to_datetime()方法直接转换即可,该方法原生支持带Z的ISO标准时间字符串:
# 假设你的DataFrame名为df,存储时间字符串的列名为time_str df['timestamp'] = pd.to_datetime(df['time_str'])
步骤2:计算相邻行的时间差
使用Series的diff()方法计算相邻行的差值,再通过dt.total_seconds()将timedelta类型转换为秒数,按需换算为其他单位即可:
# 生成timedelta类型的原始时间差列 df['time_delta'] = df['timestamp'].diff() # 转换为秒级数值 df['delta_seconds'] = df['timestamp'].diff().dt.total_seconds() # 转换为分钟级数值 df['delta_minutes'] = df['timestamp'].diff().dt.total_seconds() / 60
完整可运行示例
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'time_str': [ '2017-10-25T09:57:00.319Z', '2017-10-25T09:59:00.319Z', '2017-10-27T11:03:00.319Z' ] }) # 转换时间类型 df['timestamp'] = pd.to_datetime(df['time_str']) # 计算时间差 df['delta_seconds'] = df['timestamp'].diff().dt.total_seconds() df['delta_minutes'] = df['timestamp'].diff().dt.total_seconds() / 60 print(df)
注:输出结果的第一行时间差为
NaN,是因为第一行没有前置行可计算差值,可根据需求使用fillna(0)替换为0。
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

