Импортируйте грязный текстовый файл в панды - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь загрузить очень грязный текстовый файл в Python / Pandas. Вот пример того, как выглядят данные в файле

Data Analytics v2.2.1 - Данные ценовой активности - Ticker1.txtData для: 2017-12-01 02:13:00 UTC - 2017-12-31 18:12:00 UTCПроизведено: 2018-01-16 19:44:53 UTCticker дата описание сектор промышленность Цена-R T1-объем V-дисперсия Цена-дельта-объем-дельта-центр-дата центр-время-центр-время-зонаTicker1 2017-12-01 02:13:00 Company Inc. N / AN / A 0.0 1 1.0 0.0 1.0 2017-11-30 21:13:00 US / EasternTicker1 2017-12-01 06:27:00 Company Inc. N /AN / A 0.0 1 1.0 0.0 1.0 2017-12-01 01:27:00 US / Eastern

Я пробовал функцию pand.read_csv Pandas с разделителем "". Тем не менее, из-за первоначального замечания, это выглядит как не работает должным образом.


import pandas as pd

data = pd.read_csv('Ticker1.txt', sep=" ", 
                   names = ['ticker',   'date', 'description',  'sector',   'industry', 'raw-s',    's-volume', 's-dispersion', 'raw-s-delta',  'volume-delta', 'center-date',  'center-time',  'center-time-zone'])

Данные файла:

Data Analytics v2.2.1 - Данные о ценовой активности - Ticker1.txtData для: 2017-12-01 02:13:00 UTC - 2017-12-3118:12:00 UTCПроизведено: 2018-01-16 19:44:53 UTCticker дата описание сектор промышленность Цена-R T1-объем V-дисперсия Цена-дельта-объем-дельта-центр-дата центр-время-центр-часовой поясTicker1 2017-12-01 02:13:00 Company Inc. N / AN / A 0.0 1 1.0 0.0 1.0 2017-11-30 21:13:00 US / EasternTicker1 2017-12-01 06:27:00 Company Inc. N / AN/ A 0.0 1 1.0 0.0 1.0 2017-12-01 01:27:00 США / Восточный

Ожидаемый результат:

Начальное примечание предназначено только для информации и должно игнорироваться.

"Data Analytics v2.2.1 - данные ценовой активности - Ticker1.txtData для: 2017-12-01 02:13:00 UTC - 2017-12-31 18:12:00 UTC Генерировано: 2018-01-16 19:44:53 UTC "

Столбцы:

'тикер', 'дата', 'описание', 'сектор', 'промышленность', 'Price-R', 'T1-volume', 'V-дисперсия', 'Цена-дельта', 'Объем-дельта', 'Центр-дата', 'Центр-время', 'Центр-часовой пояс'

Данные:

Ticker1 2017-12-01 02:13:00 Company Inc. N / AN / A 0.0 1 1.0 0.0 1.0 2017-11-30 21:13:00 США / Восточный регион

Ticker1 2017-12-01 06:27:00 Company Inc. N / AN / A 0.0 1 1.0 0.0 1.0 2017-12-01 01:27:00 US / Eastern

Ответы [ 3 ]

0 голосов
/ 07 октября 2019

Предполагая, что у вас есть 3 строки, которые вы хотите пропустить:

import pandas as pd

labels_read = ['ticker','date','d0','d1','sector','industry','Price-R','T1-volume','V-dispersion','Price-delta','volume-delta','center-date','center-time','center-time-zone']
labels = ['ticker','date','description','sector','industry','Price-R','T1-volume','V-dispersion','Price-delta','volume-delta','center-date','center-time','center-time-zone']
df = pd.read_csv("test1.csv",sep=" ",skiprows=3, names=labels_read)
df['description'] = df['d0'].str.cat(df['d1'],sep=" ")
df = df[labels]
0 голосов
/ 07 октября 2019

Спасибо @PySeeker и @jtwilson за ответы. Ценю ваш быстрый ответ. Параметр Skiprows мне помог. Однако мне пришлось использовать несколько хитростей, чтобы определить номер строки. Этот трюк может быть неэффективным, но я смог понять это и поэтому использовал его.


""" Need to print first few lines to understand where the header starts"""

lines = []

for line in pd.read_csv('Ticker1.txt', encoding='utf-8', header=None, chunksize=1):
    lines.append(line.iloc[0,0])

print(lines[0:4])

""" 

1. Its a tab delimiter file
2. Looks like first 4 lines need to be ignored

"""


import pandas as pd

data = pd.read_csv('Ticker1.txt', sep="\t", skiprows = 4)

data.columns = ['ticker',   'date', 'description',  'sector',   'industry', 'raw-s',    's-volume', 's-dispersion', 'raw-s-delta',  'volume-delta', 'center-date',  'center-time',  'center-time-zone']

data.head()

0 голосов
/ 07 октября 2019

панд read_csv() имеет ряд встроенных функций (например, skiprows) для решения подобных проблем. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...