преобразование объекта сообщения can в фрейм данных pandas - PullRequest
0 голосов
/ 15 апреля 2019
  1. Мой журнал хранится в списке в следующем формате:

log = [can.Message (timestamp = 1551734911.0096931, арбитраж_id = 0x14ff0065, extended_id = True, канал = 2,dlc = 8, данные = [0xf4, 0x7c, 0x89, 0x35, 0x28, 0xf, 0xea, 0xe]), can.Message (отметка времени = 1551734911.0102572, арбитраж_id = 0x14ff0165, extended_id = True, канал = 2, dlc = 8, данные= [0x40, 0x14, 0x0, 0x36, 0xd0, 0x39, 0x60, 0x22]), can.Message (отметка времени = 1551734911.0108252, идентификатор арбитража = 0x14ff0265, extended_id = True, канал = 2, dlc = 8, данные = [0x80, 0x35, 0x9, 0xf, 0x8c, 0x0, 0x0, 0x0]), can.Message (timestamp = 1551734911.0114133, Арбитраж_ID = 0x14fef100, extended_id = True, канал = 2, dlc = 8, data = [0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff])]

Цель: преобразовать журнал в кадр данных pandas, который выглядит следующим образом:

timestamp   arbitration_id  extended_id channel dlc data

0 1551734911.00969 0x14ff0065 TRUE 2 8 [0xf4, 0x7c, 0x89, 0x35, 0x28, 0xf, 0xea, 0xe] 1 1551734911.01025 = 0x14ff0165 TRUE 2 8 [0x40, 0x14, 0x0, 0x36, 0xd0, 0x39, 0x60, 0x22] 2 1551734911.01082 0x14ff0265 TRUE 2 8 [0x80, 0x35, 0x9, 0xf, 0x8c, 0x0, 0x0, 0x0]

Я попробовал следующий код:

log = can.BLFReader(filename)
log = list(log)
df = pd.DataFrame(log)
print(df.head(5))

Вывод:

                                               0

0 Метка времени: 1551734911.009693 ID: 14ff0065 ... 1 Метка времени: 1551734911.010257 ID: 14ff0165 ... 2 Метка времени: 1551734911.010825 ID: 14ff0265 ... 3 Метка времени: 1551734911.011413 ID: 14fef100 ... 4 Метка времени:1551734911.011973 ID: 14ff0068 ...

1 Ответ

0 голосов
/ 15 апреля 2019
import pandas as pd
import can

print(pd.__version__)

log = [can.Message(timestamp=1551734911.0096931, arbitration_id=0x14ff0065, extended_id=True, channel=2, dlc=8, data=[0xf4, 0x7c, 0x89, 0x35, 0x28, 0xf, 0xea, 0xe]), can.Message(timestamp=1551734911.0102572, arbitration_id=0x14ff0165, extended_id=True, channel=2, dlc=8, data=[0x40, 0x14, 0x0, 0x36, 0xd0, 0x39, 0x60, 0x22]), can.Message(timestamp=1551734911.0108252, arbitration_id=0x14ff0265, extended_id=True, channel=2, dlc=8, data=[0x80, 0x35, 0x9, 0xf, 0x8c, 0x0, 0x0, 0x0]), can.Message(timestamp=1551734911.0114133, arbitration_id=0x14fef100, extended_id=True, channel=2, dlc=8, data=[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])]

df_data = [{'timestamp':m.timestamp, 'arbitration_id':m.arbitration_id, 'extended_id':m.is_extended_id, 'channel':m.channel, 'dlc': m.dlc, 'data':m.data} for m in log]
df = pd.DataFrame(df_data)

...