Python: аргумент данных не может быть итератором
Я пытаюсь повторить код, который предоставляется здесь: https://github.com/IdoZehori/Credit-Score/blob/master/Credit%20score.ipynb
Приведенная ниже функция не запускается и выдает ошибку. Может кто-нибудь помочь мне решить это
def replaceOutlier(data, method = outlierVote, replace='median'):
'''replace: median (auto)
'minUpper' which is the upper bound of the outlier detection'''
vote = outlierVote(data)
x = pd.DataFrame(zip(data, vote), columns=['annual_income', 'outlier'])
if replace == 'median':
replace = x.debt.median()
elif replace == 'minUpper':
replace = min([val for (val, vote) in list(zip(data, vote)) if vote == True])
if replace < data.mean():
return 'There are outliers lower than the sample mean'
debtNew = []
for i in range(x.shape[0]):
if x.iloc[i][1] == True:
debtNew.append(replace)
else:
debtNew.append(x.iloc[i][0])
return debtNew
Вызов функции:
incomeNew = replaceOutlier(df.annual_income, replace='minUpper')
Ошибка: x = pd.DataFrame(zip(данные, голосование), столбцы =['year_income', 'outlier']) TypeError: аргумент данных не может быть итератором
PS: я понимаю, что об этом уже спрашивали, но я пытался использовать методы, однако ошибка все еще остается
2 ответа
zip нельзя использовать напрямую, вы должны предоставить результат в виде списка, то есть:
x = pd.DataFrame(list(zip(data, vote)), columns=['annual_income', 'outlier'])
Это на самом деле работает в версии 0.24.2 для панд без использования списка вокруг zip
Пиши вот так
coef = DataFrame(list(zip(x.columns,np.transpose(log_model.coef_))))
Это происходит из-за проблемы с типом данных, вы можете сначала преобразовать его в список, а затем этот список в фрейм данных. Ex. pd.DataFrame(list(data)) должен работать.
zip(list1,list2)
работает в Jupyter Notebook, но я считаю, что
list(zip(list1,list2))
требуется для работы в компиляторе Python по умолчанию.