首页 > 解决方案 > 获取csv文件中两个值之间的时间差

问题描述

我试图获取 csv 文件中值出现之间的平均、最大和最小时间差。包含多个列和行。我目前正在使用 python 并尝试使用 pandas 来解决我的问题。

我已设法将 csv 文件分解为我想要从中获取时差的列和时间列。“有效负载”列“值出现”发生的位置。
看起来像:

时间 | 有效载荷 12.1 2368 13.8 2508

我还尝试在值发生时获取数组中的时间,并尝试逐步遍历数组但失败了。我觉得有一种更简单的方法可以做到这一点。

def average_time(avg_file):
    avg_read = pd.read_csv(avg_file, skiprows=2, names=new_col_names, usecols=[2, 3], na_filter=False, skip_blank_lines=True)
    test=[]
    i=0
    for row in avg_read.payload:
        if row != None:
            test[i]=avg_read.time
            i+=1
            if len[test] > 2:
                average=test[1]-test[0]
                i=0
                test=[]
    return average

csv 文件目前看起来像:

time    |   payload
12.1        2250
12.5        2305
12.9        (blank)
13.1        (blank)
13.5        2309
14.6        2350
14.9        2680
15.0        (blank)

我想获得有效载荷列中的值之间的时间差异。示例时间间隔

2250 and 2305 --> 12.5-12.1 = 0.4 sec

和得到之间的区别

2305 and 2309 --> 13.5-12.5 = 1 s

跳过空白数字 稍后获得最大、最小和平均差异。

标签: pythonpandascsvparsingtime

解决方案


先用dropna再用Series.diff

使用的数据框:

print(df)
   time  payload
0  12.1   2250.0
1  12.5   2305.0
2  12.9      NaN
3  13.1      NaN
4  13.5   2309.0
5  14.6   2350.0
6  14.9   2680.0
7  15.0      NaN

df.dropna().time.diff()

0    NaN
1    0.4
4    1.0
5    1.1
6    0.3
Name: time, dtype: float64

注意我假设你的(blank)值是NaN,否则在运行我的代码之前使用以下内容:

df.replace('(blank)', np.NaN, inplace=True, axis=1)

# Or if they are whitespaces

df.replace('', np.NaN, inplace=True, axis=1)

推荐阅读