Как преобразовать строку в дату и время без дней в пандах

0

Например, столбец issue_d в dataframe - это строка, df['issue_d'] = 'Dec-2012'

Я хочу преобразовать строку в тип datetime, а не тип строки: 2012-12, как это сделать?

я использую

[datetime.strptime(x, '%b-%Y') for x in df.issue_d]

Но я получаю результат 2012-12.

Как я могу получить результат без дней и сохранить его в базе данных с помощью mysql и sqlalchemy? Я создаю столбец issue_d с типом DateTime() в моей базе данных. Я хочу вставить df ['issue_d'] в эту таблицу.

Таблица, созданная с использованием sqlalchemy

Показать ещё 3 комментария
Теги:
pandas

4 ответа

3
ex = pd.to_datetime('Dec-2012')
str(ex.year) + "-" + str(ex.month)

и с серией

series = pd.Series(["Dec-2012", "Nov-2013"])
series = pd.to_datetime(series)
series.apply(lambda x: str(x.year) + "-" + str(x.month))

вы также можете использовать

series.dt.to_period('M')

Проверьте документы pandas: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html.

  • 0
    Я хочу, чтобы тип данных был дата-время, а не тип строки.
0
months = {
        'Jan' : 1,
        'Feb' : 2,
        'Mar' : 3,
        'Apr' : 4,
        'May' : 5,
        'Jun' : 6,
        'Jul' : 7,
        'Aug' : 8,
        'Sep' : 9, 
        'Oct' : 10,
        'Nov' : 11,
        'Dec' : 12
}

temp = df['issue_d']
temp.split('-')
return temp[1] + '-' + str(months[temp[0]])

Учитывая строку "Dec-2012", это должно вернуться к 2012-12 гг.

0

IIUC, вот один из способов:

Начиная с кадра данных df:

>>> df
    issue_d
0  Dec-2012
1  Jan-2013

Сначала конвертируйте в datetime, затем примените strftime:

df['issue_d'] = pd.to_datetime(df['issue_d'])
df['issue_d'] = df['issue_d'].dt.date.apply(lambda x: x.strftime('%Y-%m'))

>>> df
   issue_d
0  2012-12
1  2013-01

Обратите внимание, что теперь это строковое представление вашей даты, но поскольку вы хотите отформатированную дату, я думаю, что она решает вашу проблему.

0
datetime.datetime.strftime(datetime.datetime.strptime("DEC-2012", '%b-%Y'),'%Y-%m')
  • 0
    Результатом является тип строки, а не дата и время
  • 0
    Мне интересно, что в случае использования объекта datetime без дня должен использоваться формат поля datetime.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню