-1

さて、機械学習プロジェクトのデータをクリーンアップしようとしています。外れ値の検出に Z スコアを使用しています。データベースにはさまざまな種類のガラス (1 ~ 7) が含まれており、各ガラスの種類を調べて外れ値を見つけ、特定の種類のガラスに含まれるナトリウムの平均値 ("Na" 列) に置き換えたいと考えています。奇妙なことに、ガラス タイプ 1 と 2 ではアルゴリズムが機能しますが、タイプ 3 になると ValueError が返されます。何が問題のように見えるか知っていますか?

z = stats.zscore(DataFrame.Na)
threshold = 1.99

for t in DataFrame.Type.unique():
    z = stats.zscore(DataFrame.Na[DataFrame.Type==t])
    print([DataFrame.Na[DataFrame.Type==t][(np.abs(z) > threshold)]])
    DataFrame.Na[DataFrame.Type==t] = DataFrame.Na[DataFrame.Type==t].replace([DataFrame.Na[DataFrame.Type==t][(np.abs(z) > threshold)]],np.mean(DataFrame.Na[DataFrame.Type==t]))

出力は次のとおりです。

[17    14.36
21    14.77
Name: Na, dtype: float64]
[70     14.86
105    11.45
106    10.73
108    14.43
110    11.23
111    11.02
Name: Na, dtype: float64]
[149    12.16
Name: Na, dtype: float64]

/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:9: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  if __name__ == '__main__':
/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:9: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  if __name__ == '__main__':
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/opt/conda/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2897             try:
-> 2898                 return self._engine.get_loc(casted_key)
   2899             except KeyError as err:

KeyError: 0

これの何が問題なのか知っている人はいますか?追加情報が必要な場合は、提供します。これについて約 2 時間考えてみましたが、手がかりがありません...

4

2 に答える 2