Разбор транспонированного CSV со значениями даты и времени в нескольких строках панд - PullRequest
0 голосов
/ 01 мая 2019

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

Проблемы, с которыми я сталкиваюсь:

a) CSV-файл транспонирован, поэтому даты не могут бытьразобрали по колонкам.Транспонирование файла с использованием команды read_csv().T, как правило, будет работать, но это не подходит, учитывая информацию о дате и времени.

b) поскольку индекс даты и времени находится в строке заголовка, к повторяющимся точкам данных добавляются цифры (т. Е.Jan становится Jan, Jan.1, Jan.2 и т. Д.), Поэтому извлечение значений даты и времени становится трудным.

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

Существует ли простой способ перехода от csv к «стандартной» структуре данных, когда индекс datetime анализируется из csv и значенийв колонках?

Здесь приведен пример структуры данных CSV:

empty  | empty  | Jan   | Jan   | Jan   | ... | Dec   |
empty  | empty  |  1    |  1    |  1    | ... | 31    |
head1  | head2  | 00:00 | 01:00 | 02:00 | ... | 23:00 |
---
value1 | value2 | 0.35  | 0.38  | 0.44  | ... | 0.20  |
...

1 Ответ

0 голосов
/ 01 мая 2019

Попробуйте:

# read csv with no header 
df = pd.read_csv('untitled.txt', header=None).T

# create an index by joining all the columns
df['idx'] = [ ' '.join((a,b,c)) for a,b,c in 
             zip(df[0].fillna(''),
                 df[1].fillna(''), 
                 df[2].fillna('')) ]

# drop the unnecessary columns
df.drop([0,1,2], axis=1, inplace=True)

# output
df.set_index('idx').T.reset_index(drop=True)

Выход:

+----+-----------+-----------+---------------+---------------+---------------+----------------+
|    |   head1   |   head2   |   Jan 1 00:00 |   Jan 1 01:00 |   Jan 1 02:00 |   Dec 31 23:00 |
|----+-----------+-----------+---------------+---------------+---------------+----------------|
|  0 | value1    | value2    |          0.35 |          0.38 |          0.44 |            0.2 |
+----+-----------+-----------+---------------+---------------+---------------+----------------+

Как и выше, столбцы все еще текстовые (str тип). Вам нужно конвертировать их обратно в метки времени, если это необходимо.

...