python3 - импортировать фрейм данных из текстового формата head1 = значение | head2 = значение - PullRequest
0 голосов
/ 09 сентября 2018

Я посмотрел документацию на панд, и есть несколько вариантов импорта данных в фрейм данных панд. Обычный способ - импортировать CSV-файл, когда дело доходит до импорта текстовых файлов.

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

timestamp=2018-09-08T11:11:58.362028|head1=value|head2=value|head3=value
timestamp=2018-09-08T11:15:25.860244|head1=value|head2=value|head3=value

Мне нужно лишь импортировать некоторые из этих элементов в таймфрейм данных, скажем, timestamp, head1 и head3.

В формате CSV датафрейм будет выглядеть так:

timestamp;head1;head3
logfile row1 - value of timestamp; value of head1; value of head3
logfile row2 - value of timestamp; value of head1; value of head3
logfile row3 - value of timestamp; value of head1; value of head3

Я мог бы написать CSV-файл, используя эти данные, чтобы импортировать его после слов. Но есть ли функция панд или прямой способ импортировать эти данные в фрейм данных панд?

Спасибо за вашу помощь заранее!

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Я бы проанализировал и обработал файл так:

with open('file.csv', 'r') as fh:
  df = pd.DataFrame([dict(x.split('=') for x in l.strip().split('|')) for l in fh])
  df = df[['timestamp', 'head1', 'head3']]

df

                    timestamp  head1  head3
0  2018-09-08T11:11:58.362028  value  value
1  2018-09-08T11:15:25.860244  value  value
0 голосов
/ 09 сентября 2018

Спасибо за отличные решения! Я использовал предоставленное решение, но отфильтровал нужные строки уже при импорте, чтобы другие структурированные элементы в файле журнала не мешали:

import pandas as pd
with open('logfile.txt', 'r') as fh:
  df = pd.DataFrame([dict(x.split('=') for x in l.strip().split('|') if x.find("timestamp") > -1 or x.find("head1") > -1 or x.find("head3") > -1) for l in fh])
0 голосов
/ 09 сентября 2018

Вы можете сделать:

 columns = ['timestamp','head1','head2','head3']
 pd.read_csv(your_file.csv,sep='|',names = columns).drop('head2',1).replace('.*=','',regex=True)
...