#python #pandas
Вопрос:
Привет, у меня есть фрейм данных и список столбцов, по которым я хочу выполнить цикл:
#list of the 4 columns i want to perform function on
columnnames= ['a','b','c','d']
#Function
for col in columnnames:
df[f"{col}_new"] = df.groupby('Name')[col].transform(lambda x: x.rolling(20).apply(ewma).shift())
Когда я запускаю этот цикл, я получаю следующую ошибку:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-21-519963825599> in <module>
8 ewma = partial(np.average, weights=weights)
9 for col in columnnames:
---> 10 df[f"{col}_new"] = df.groupby('Name')[col].transform(lambda x: x.rolling(20).apply(ewma).shift())
11
12 #df['testcolumn'] = df['test']*2
~anaconda3libsite-packagespandascoregroupbygeneric.py in transform(self, func, *args, **kwargs)
463
464 if not isinstance(func, str):
--> 465 return self._transform_general(func, *args, **kwargs)
466
467 elif func not in base.transform_kernel_whitelist:
~anaconda3libsite-packagespandascoregroupbygeneric.py in _transform_general(self, func, *args, **kwargs)
507 # we have a numeric dtype, as these are *always* user-defined funcs
508 # the cython take a different path (and casting)
--> 509 dtype = self._selected_obj.dtype
510 if is_numeric_dtype(dtype):
511 result = maybe_downcast_to_dtype(result, dtype)
~anaconda3libsite-packagespandascoregeneric.py in __getattr__(self, name)
5272 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5273 return self[name]
-> 5274 return object.__getattribute__(self, name)
5275
5276 def __setattr__(self, name: str, value) -> None:
AttributeError: 'DataFrame' object has no attribute 'dtype'
Есть какие-нибудь идеи о том, в чем может быть моя проблема?
Я успешно запустил это в другом фрейме данных (который очень похож), поэтому я просто не знаю, о чем говорит мне эта ошибка.
Большое спасибо!
Комментарии:
1. Покажите нам всю обратную связь. Этот код не вызывает
dtype
.2. готово @TimRoberts
Ответ №1:
Оказывается, моя ошибка заключалась в том, что у меня было несколько столбцов с одинаковым именем!