#python #python-3.x #pandas #dask
Вопрос:
В этом примере я пытаюсь отсортировать фрейм данных Dask с помощью двух столбцов balance
и year
извлечь его из date
поля. Я пытаюсь объединить в новое поле баланс в виде строки с годом в виде строки, но получаю ошибку:
pdf = pd.DataFrame({
'id': [1, 1, 1, 2, 2],
'balance': [350, 340, 130, 280, 260],
'date' : [datetime(2021,3,1), datetime(2021,2,7), datetime(2021,7,1),
datetime(2021,2,6), datetime(2021,3,18)]
})
ddf = dd.from_pandas(pdf, npartitions=100)
ddf['newIndex'] = str(ddf['balance']) (ddf['date']).year # <-- this throws the error
ddf = ddf.set_index(['newIndex'])
Ошибка, которую я получаю, это:
Ошибка атрибута: объект «Серия» не имеет атрибута «год»
Поле даты-это серия, я понимаю, но как извлечь год из даты и объединить баланс для сортировки по этому новому полю?
Ответ №1:
Небольшая настройка сделает эту работу:
ddf['newIndex'] = ddf['balance'].astype('str') ddf['date'].dt.year.astype('str')
Обратите внимание, что основная ошибка заключалась в отсутствии .dt
метода, и позже вам понадобятся оба столбца, str
чтобы добавить их.
Однако с точки зрения того, чего вы пытаетесь достичь, возможно, было бы лучше сначала разделить данные по годам, а затем выполнить сортировку внутри разделов. Это, конечно, зависит от специфики ваших данных.