Подтвердить что ты не робот

Параметр даты, когда YYYYMMDD и HH находятся в отдельных столбцах, используя pandas в Python

У меня есть простой вопрос, связанный с csv файлами и синтаксический анализ datetime.

У меня есть файл csv, который выглядит так:

YYYYMMDD, HH,    X
20110101,  1,   10
20110101,  2,   20
20110101,  3,   30

Я хотел бы прочитать его с помощью pandas (read_csv) и иметь его в фрейме данных, индексированном по дате. До сих пор я пытался реализовать следующее:

import pandas as pnd
pnd.read_csv("..\\file.csv",  parse_dates = True, index_col = [0,1])

и я получаю результат:

                         X
YYYYMMDD    HH            
2011-01-01 2012-07-01   10
           2012-07-02   20
           2012-07-03   30

Как вы видите parse_dates при преобразовании HH в другую дату.

Есть ли простой и эффективный способ правильно совместить столбец "YYYYMMDD" со столбцом "HH", чтобы иметь что-то вроде этого?

                      X
Datetime              
2011-01-01 01:00:00  10
2011-01-01 02:00:00  20
2011-01-01 03:00:00  30

Заранее благодарим за помощь.

4b9b3361

Ответ 1

Если вы передаете список index_col, это означает, что вы хотите создать иерархический индекс из столбцов в списке.

Кроме того, ключевое слово parse_dates может быть установлено как True, так и список /dict. Если True, то он пытается проанализировать отдельные столбцы как даты, иначе он объединяет столбцы для синтаксического анализа одного столбца даты.

В общем, что вы хотите сделать:

from datetime import datetime
import pandas as pd
parse = lambda x: datetime.strptime(x, '%Y%m%d %H')
pd.read_csv("..\\file.csv",  parse_dates = [['YYYYMMDD', 'HH']], 
            index_col = 0, 
            date_parser=parse)

Ответ 2

Я делаю это все время, поэтому я тестировал разные способы скорости. Самый быстрый, который я нашел, следующий, прибл. В 3 раза быстрее, чем решение Chang She, по крайней мере в моем случае, когда учитывается общее время разбора файла и синтаксический анализ даты:

Сначала проанализируйте файл данных, используя pd.read_csv с отсутствием даты синтаксического анализа. Я нахожу, что это замедляет чтение файлов довольно много. Убедитесь, что столбцы CSV файла теперь являются столбцами в dataframe df. Тогда:

format = "%Y%m%d %H"
times = pd.to_datetime(df.YYYYMMDD + ' ' + df.HH, format=format)
df.set_index(times, inplace=True)
# and maybe for cleanup
df = df.drop(['YYYYMMDD','HH'], axis=1)