У меня есть кадр данных Pandas версии 0.12. Я пытаюсь преобразовать месяцы в строке series
в текстовый формат, например. 04 = April
, 05 = May
. Мне пришлось работать с двумя разными версиями (12 против 13) Pandas, которые, похоже, имеют существенные изменения интерфейса.Pandas версия 0.12 to version 0.13 to_datetime несовместимость
df['date']
0 15/04/2013
1 09/02/2015
2 05/01/2015
3 26/01/2015
4 26/01/2015
Name: date, dtype: object
type(df['date'][0])
<type 'str'>
Этот код работает с Pandas версии 0.13 и преобразует, например. 15/02/2015
до 15 February 2015
, для каждой записи в series
.
df.date = pd.to_datetime(df['date'], format="%d/%m/%Y").apply(lambda x: x.date().strftime('%d %B %Y'))
Но выдает ошибку с версией 0.12:
File "/.../pandas/tseries/tools.py", line 124, in to_datetime values = _convert_listlike(arg.values, box=False) File "/.../pandas/tseries/tools.py", line 103, in _convert_listlike result = tslib.array_strptime(arg, format) File "tslib.pyx", line 1112, in pandas.tslib.array_strptime (pandas/tslib.c:18277)
TypeError: expected string or buffer
Мне просто нужно, чтобы это было сделано с, любые идеи о том, что панды 12 пробную выше код будет? Мне тоже не нужно использовать to_datetime()
, поэтому любые альтернативные решения очень приветствуются!
EDIT:
Я попробовал эту вервь @ EdChum-х рекомендации:
df['date'] = df['date'].apply(lambda x: dt.datetime.strptime(x,'%d/%m/%Y')).apply(lambda x: x.date().strftime('%d %B %Y'))
Но это дает ошибку:
File "/.../pandas/core/series.py", line 2536, in apply mapped = lib.map_infer(values, f, convert=convert_dtype) File "inference.pyx", line 864, in pandas.lib.map_infer (pandas/lib.c:42840) File " in <lambda> df['date'] = df['date'].apply(lambda x: dt.datetime.strptime(x,'%d/%m/%Y')).apply(lambda x: x.date().strftime('%d %B %Y')) TypeError: must be string, not float
Я думаю, что это ответ @ комментарий JORIS как хорошо , похоже, проблема связана с частью .apply()
. Я не понимаю, как/где в этой строке кода создается float
...
Можете ли вы попробовать это, и если это сработает, я отправлю в качестве ответа: 'df ['date'] = df ['date']. Apply (lambda x: dt.datetime.strptime (x, '% d/% m /% Y ')) apply (lambda x: x.date(). strftime ('% d% B% Y ')) ' – EdChum
Это работает для меня в pandas 0,12. Можете ли вы проверить, какая часть порождает ошибку? (часть 'to_datetime' или часть' apply') – joris
@joris, из исключения (добавлено в вопрос), я считаю, что оно находится в 'to_datetime' – Rhubarb