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 по умолчанию.

Другие вопросы по тегам