1. ホーム
  2. python

[解決済み] Python: データ引数はイテレータにできない

2022-02-24 15:53:22

質問

ここに提供されているコードを再現しようとしているのですが。 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(data, vote), columns=['annual_income', 'outlier']) TypeError: data 引数はイテレータではありえない。

追記:以前にも質問されたことがあるようですが、テクニックを使ってみましたが、まだエラーは残っています。

解決方法は?

zipは直接使用できませんので、結果をリストにして渡す必要があります。

x = pd.DataFrame(list(zip(data, vote)), columns=['annual_income', 'outlier'])

編集 (以下 バイエルン の回答) :
リリース0.24.0以降では、リストの生成に zip という記述が有効です。

x = pd.DataFrame(zip(data, vote), columns=['annual_income', 'outlier'])