вычисление разницы между значениями меток времени из одного столбца - PullRequest
0 голосов
/ 22 июня 2019

Я работаю над преобразованием файла Blf в отдельный файл Tab. Я могу извлечь всю полезную информацию из файла в списке ниже. Я хочу вычислить разницу между значениями меток времени, приходящимися на один столбец. Пожалуйста, найдите прикрепленный мой код до сих пор:

import can
import csv
import datetime
import pandas as pd

filename = open('C:\\Users\\shraddhasrivastav\\Downloads\\BLF File\\output.csv', "w")
log = can.BLFReader('C:\\Users\\shraddhasrivastav\\Downloads\\BLF File\\test.blf')

# print ("We are here!")
log_output = []

for msg in log:
    msg = str(msg).split()
    #print (msg)

    data_list = msg[7:(7 + int(msg[6]))]

    log_output_entry = [(msg[1]), msg[3], msg[6], " ".join(data_list), msg[-1]]
    log_output_entry.insert(1, 'ID=')
    test_entry = " \t ".join(log_output_entry)  # join the list and remove string quotes in the csv file

    filename.write(test_entry + '\n')

df = pd.DataFrame(log_output)
df.columns = ['Timestamp', 'ID', 'DLC','Channel']

filename.close()  # Close the file outside the loop

Вывод, который я получаю до сих пор, ниже:

enter image description here

В моем первом столбце я хочу разницу между значениями меток времени ( Пример - значение 2-й строки - значение метки времени 1-й строки ... Значение метки времени 4-й строки - значение метки времени 3-й строки ... и так далее .. . Что я должен добавить в свой код для достижения этой цели?

Ниже приведен скриншот того, как я хочу, чтобы поле Timestamp моего файла выглядело так. (Расчет разницы между последовательными строками)

введите описание изображения здесь

1 Ответ

0 голосов
/ 22 июня 2019

Вы можете использовать pandas.DataFrame.shift:

df['Time Delta'] = df['Timestamp'] - df['Timestamp'].shift(periods=1, axis=0)

Имейте в виду, что файл, который у вас есть, кажется, имеет переменную длину между столбцами в текстовом файле, в который вы пишете, поэтому может быть трудно вставить его непосредственно в панд. Может быть, будет работать следующее:

import can
import csv
import datetime
import pandas as pd

#filename = open('C:\\Users\\shraddhasrivastav\\Downloads\\BLF File\\output.csv', "w")
log = can.BLFReader('C:\\Users\\shraddhasrivastav\\Downloads\\BLF File\\test.blf')

# print ("We are here!")
log_output = []

for msg in log:
    msg = str(msg).split()
    #print (msg)

    data_list = msg[7:(7 + int(msg[6]))]

    log_output_entry = [(msg[1]), msg[3], msg[6], " ".join(data_list), msg[-1]]
    log_output_entry.insert(1, 'ID=')
    assert len(log_output_entry)==4
    log_output.append(log_output_entry)
    #test_entry = " \t ".join(log_output_entry)  # join the list and remove string quotes in the csv file

    #filename.write(test_entry + '\n')

df = pd.DataFrame(log_output)
df.columns = ['Timestamp', 'ID', 'DLC','Channel']
df['Timestamp'] = pd.to_datetime(df['Timestamp'],unit='s')
df['Time Delta'] = df['Timestamp'] - df['Timestamp'].shift(periods=1, axis=0)
df.to_csv('C:\\Users\\shraddhasrivastav\\Downloads\\BLF File\\output_df.csv')

#filename.close()  # Close the file outside the loop
...