Python 尝试替换熊猫中的异常值时出现问题

Python 尝试替换熊猫中的异常值时出现问题,python,pandas,dataframe,numpy,outliner,Python,Pandas,Dataframe,Numpy,Outliner,好的,我正在努力清理机器学习项目的数据。我使用Z-Score来检测异常值。数据库包含不同类型的玻璃(从1到7),我想检查每种玻璃类型,找到异常值,并用给定类型玻璃中钠的平均值(“Na”列)替换它们。奇怪的是,该算法适用于glass类型1和2,但对于类型3,它会给出一个值错误。你们知道有什么问题吗 z = stats.zscore(DataFrame.Na) threshold = 1.99 for t in DataFrame.Type.unique(): z = stats.zsco

好的,我正在努力清理机器学习项目的数据。我使用Z-Score来检测异常值。数据库包含不同类型的玻璃(从1到7),我想检查每种玻璃类型,找到异常值,并用给定类型玻璃中钠的平均值(“Na”列)替换它们。奇怪的是,该算法适用于glass类型1和2,但对于类型3,它会给出一个值错误。你们知道有什么问题吗

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个小时,我没有任何线索…

我不能发表评论,所以我会发布我的评论作为答案


您是否试图检测“异常值”或“大纲视图”。这里不仅仅是迂腐,因为它们是不同的统计概念。

发生的事情是,在某个地方,您试图在没有第0行的数据帧中设置第0行的值。试着把你的长队分开,把结果打印到控制台上,你可能会发现这样的错误。

请包括一个。是的,你是对的,我指的是离群值。对不起,我弄错了。好吧,我照你说的做了。我分别打印了每个元素,奇怪的是每个元素都给出了一个值,看起来一切都正常。类型3的输出是:
[False-False-False-False-False-False-False-False]13.437058823529412-平均值,[149 12.16
-异常值在DF中的位置,因此它发现哪个值是异常值,计算平均值(13.43),该异常值位于数据帧中,但当我试图将其组合到一行代码中时,仍然给出KeyError 0。