Мне нужно обработать список файлов журнала и преобразовать строковые данные в этих файлах в один кадр данных для анализа. Каждый файл журнала содержит одну или несколько пар строк, соответствующих идентификатору, возникновению ошибки и времени ее устранения. Но если было несколько одновременных ошибок на разных идентификаторах, ошибки перечисляются в последовательных строках как группа, а затем соответствующие «очищенные» строки выводятся в виде группы.
Я могу разбивать строки для каждой строки данных и достаточно легко добавлять новые строки в фрейм данных. Но я не знаю, как объединить дату из каждой пары строк в одну строку в df, тем более что они не обязательно упорядочены по одной паре за раз.
Упрощенный файл журнала примера ("example.log" в приведенном ниже коде):
ID1 Error code A
ID1 Error cleared: 00:01:00
ID2 Error code B
ID3 Error code B
ID4 Error code A
ID2 Error cleared: 00:02:00
ID3 Error cleared: 00:02:00
ID4 Error cleared: 00:02:00
ID5 Error code B
ID5 Error cleared: 00:03:00
ID2 Error code A
ID2 Error cleared: 00:04:00
ID6 Error code A
ID6 Error cleared: 00:05:00
Желаемый фрейм данных:
TID ERROR CLEARED
0 ID1 A 00:01:00
1 ID2 B 00:02:00
2 ID3 B 00:02:00
3 ID4 A 00:02:00
4 ID5 B 00:03:00
5 ID2 A 00:04:00
6 ID6 A 00:05:00
Этот код выдает df со всеми данные в правильных столбцах, но со строкой для каждой строки журнала. Я хотел бы иметь только 1 строку для каждой пары данных, очищенных от ошибок / времени.
import pandas as pd
df=pd.DataFrame()
with open('example.log') as file:
for line in file:
part = line.split()
tid=part[0]
if 'code' in line:
error=part[3]
if 'cleared' in line:
time=part[3]
dfx=pd.DataFrame([[tid,error,time]],columns=['TID','ERROR','CLEARED'])
df=df.append(dfx, ignore_index=True)
tid=''
error=''
time=''
В результате получается слишком много ненужных строк:
TID ERROR CLEARED
0 ID1 A
1 ID1 00:01:00
2 ID2 B
3 ID3 B
4 ID4 A
5 ID2 00:02:00
6 ID3 00:02:00
7 ID4 00:02:00
8 ID5 B
9 ID5 00:03:00
10 ID2 A
11 ID2 00:04:00
12 ID6 A
13 ID6 00:05:00
Если я сделаю отступ для последней несколько строк, поэтому новые строки строятся только после «очищенной» строки, это близко к тому, что я хочу, но ошибки не заполняются правильно.
import pandas as pd
df=pd.DataFrame()
with open('example.log') as file:
for line in file:
part = line.split()
tid=part[0]
if 'code' in line:
error=part[3]
if 'cleared' in line:
time=part[3]
dfx=pd.DataFrame([[tid,error,time]],columns=['TID','ERROR','CLEARED'])
df=df.append(dfx, ignore_index=True)
tid=''
error=''
time=''
Результаты в одной строке на вхождение, но несогласованные данные в Столбец ОШИБКИ:
TID ERROR CLEARED
0 ID1 A 00:01:00
1 ID2 A 00:02:00
2 ID3 00:02:00
3 ID4 00:02:00
4 ID5 B 00:03:00
5 ID2 A 00:04:00
6 ID6 A 00:05:00
Может кто-нибудь помочь мне перенести данные в кадр данных, чтобы ошибки правильно выстроились? Спасибо.