преобразовать название года и месяца в столбец даты и времени для кадра данных панд - PullRequest
0 голосов
/ 03 июня 2018

Как преобразовать имя года и месяца в столбец даты и времени для этого кадра данных:

 region  year    Months
0  alabama  2018   January
1  alabama  2018  February
2  alabama  2018     March
3  alabama  2018     April
4  alabama  2018       May

Когда я это делаю:

pd.to_datetime(df_sub['year'] * 10000 + df_sub['Months'] * 100, format='%Y%m')

Я получаю эту ошибку:

*** TypeError: unsupported operand type(s) for +: 'int' and 'str'

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Вот простая программа, которая получает результат, который вы ищете:

import pandas as pd

data_frame = pd.DataFrame({'Region': ['alabama', 'alabama', 'alabama', 'alabama', 'alabama'],
                          'Year': [2018, 2018, 2018, 2018, 2018], 'Months': ['January', 'February', 'March', 'April', 'May']})


date_1 ='{}-{}'.format(data_frame['Months'].iloc[0], data_frame['Year'].iloc[0])
date_2 = '{}-{}'.format('June', data_frame['Year'].iloc[4])

data_frame.index = pd.date_range(date_1, date_2, freq='M')
print(data_frame)

Мы можем просто отформатировать дату в начальной позиции в диапазоне, а формат даты_2 из конечной позиции + 1месяц, чтобы мы могли избежать ошибки индекса.Форматирование этих значений в строки позволит пандам форматировать их в даты с помощью функции date_range ().Мы можем установить индекс в этот диапазон, так как вы сказали, что хотите столбец с этими значениями, но если вы не хотите, чтобы даты были вашим индексом, мы могли бы также создать столбец с именем date и использовать оператор вставки, чтобы добавить ихгде угодно.В нашей функции date_range date_1 будет нашей первой датой, а date_2 будет нашей последней датой.Мы также можем установить частоту в месяц, чтобы индексы в столбце даты совпадали с индексами из других столбцов.Ниже наш вывод:

              Months   Region  Year
2018-01-31   January  alabama  2018
2018-02-28  February  alabama  2018
2018-03-31     March  alabama  2018
2018-04-30     April  alabama  2018
2018-05-31       May  alabama  2018
0 голосов
/ 03 июня 2018

f-строка в понимании (Python 3.6 +)

pd.to_datetime([f'{y}-{m}-01' for y, m in zip(df.year, df.Months)])

DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01',
               '2018-05-01'],
              dtype='datetime64[ns]', freq=None)

str.format

pd.to_datetime(['{}-{}-01'.format(y, m) for y, m in zip(df.year, df.Months)])

DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01',
               '2018-05-01'],
              dtype='datetime64[ns]', freq=None)
0 голосов
/ 03 июня 2018

Вы можете преобразовать year столбец в строку, добавить Months и использовать параметр format в to_datetime на http://strftime.org/:

print (pd.to_datetime(df_sub['year'].astype(str)  + df_sub['Months'], format='%Y%B'))
0   2018-01-01
1   2018-02-01
2   2018-03-01
3   2018-04-01
4   2018-05-01
dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...