使用pandas计算连续行秒级时间差触发TypeError报错如何解决?
错误原因
你遇到的类型报错是因为pd.read_csv默认将BaseDateTime列的内容识别为字符串格式,字符串无法直接执行减法运算,因此触发unsupported operand type(s) for -: 'str' and 'str'的错误。
你使用的YYYY-MM-DDTHH:MM:SS属于ISO标准时间格式,pandas可以直接识别转换,不需要手动指定时间格式模板。
解决方案
先将日期列转换为pandas内置的datetime类型,再计算时间差并转为秒单位即可,完整实现代码如下:
import pandas as pd # 读取CSV时直接解析日期列,一步完成类型转换 df = pd.read_csv('Output1.csv', parse_dates=['BaseDateTime']) # 计算相邻行时间差,转为秒单位存入新列 df['Time_diff'] = df['BaseDateTime'].diff().dt.total_seconds() print(df)
补充说明
- 输出结果第一行的
Time_diff值为NaN属于正常情况,因为首行没有上一行数据可以计算差值 - 如果你的数据中存在不合法的日期值,可以用以下方式转换日期,自动将非法日期转为空值
NaT,避免程序中断:import pandas as pd df = pd.read_csv('Output1.csv') df['BaseDateTime'] = pd.to_datetime(df['BaseDateTime'], errors='coerce') df['Time_diff'] = df['BaseDateTime'].diff().dt.total_seconds() - 按照你提供的前5行测试数据,最终得到的
Time_diff列结果依次为:NaN、0、5、1、3,符合预期。
内容的提问来源于stack exchange,提问作者milad
相关产品推荐
相关产品推荐

