Например, столбец 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'] в эту таблицу.
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.
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 гг.
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
Обратите внимание, что теперь это строковое представление вашей даты, но поскольку вы хотите отформатированную дату, я думаю, что она решает вашу проблему.
datetime.datetime.strftime(datetime.datetime.strptime("DEC-2012", '%b-%Y'),'%Y-%m')