Панды read_csv parse_dates из 2 столбцов - PullRequest
0 голосов
/ 27 октября 2018

Я не нашел здесь поста, который вполне соответствует моей ситуации.У меня есть CSV-файл, где первый столбец - год (2002), второй столбец - Месяц (январь), а третий столбец - Месячный код (1 для января и т. Д.).Я хотел бы импортировать в фрейм данных Pandas для создания полного индекса даты.Следующий код выдает ошибку, но должен показать вам, что я пытаюсь сделать.

Ошибка: ValueError: данные времени '2002' не соответствуют формату '% Y% b% d'

Примечание: у меня нет данных дня месяца, поэтому я должен использовать первый или последний, если нет способа индексировать только год и месяц без дня.

данные выглядят так:

Year    Month   Month Code  District Code   District
2002    January 1   1   Albany
2002    January 1   2   Allegany
2002    January 1   3   Broome
2002    January 1   4   Cattaraugus
2002    January 1   5   Cayuga

Код, который не работает:

file = 'C:/.../snap.csv'

parser = lambda date: pd.datetime.strptime(date, '%Y%b%d')


# create dataframe from csv file
snapdf = pd.read_csv(file, parse_dates = [0,1], date_parser = parser)
# NOTE: I also tried parse_dates = [0,2] but same error

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я наконец-то запустил это, и в конце концов это было довольно просто.

snapdf["DateIndex"] = pd.to_datetime(snapdf['Year'].astype(str), format='%Y')

Это берет значение из столбца Year в кадре данных (хранится как Int) и преобразует его в строку даты вновый столбец DateIndex.Поскольку данных за месяц или день нет, автоматически добавляется 01/01 как месяц и день.

Таким образом, 2017 в столбце Год становится 01/10 / 2017

0 голосов
/ 28 октября 2018

Я изменил данные, чтобы было более очевидно, как даты разбираются в кадре данных

Year,Month,Month Code,District Code,District
2002,January,1,1,Albany
2004,February,1,2,Allegany
2005,December,1,3,Broome
2007,August,1,4,Cattaraugus
2001,March,1,5,Cayuga

с использованием параметра parse_dates со столбцом 1-3:

>>>> with open('snap.csv') as f:
       df = pd.read_csv(f, parse_dates={'Date': [0,1,2]}, index_col='Date')

>>>> df
            District Code     District
Date                                  
2002-01-01              1       Albany
2004-02-01              2     Allegany
2005-12-01              3       Broome
2007-08-01              4  Cattaraugus
2001-03-01              5       Cayuga

>>>> df.District
Date
2002-01-01         Albany
2004-02-01       Allegany
2005-12-01         Broome
2007-08-01    Cattaraugus
2001-03-01         Cayuga
Name: District, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...