【问题标题】:Problem while trying to replace outliers in pandas尝试替换熊猫中的异常值时出现问题
【发布时间】:2021-02-02 21:06:41
【问题描述】:

好的,我正在尝试清理机器学习项目的数据。我正在使用 Z-Score 进行异常值检测。数据库包含不同类型的玻璃(从 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 个小时,我没有任何线索...

【问题讨论】:

标签: python pandas dataframe numpy outliner


【解决方案1】:

我无法发表评论,所以我会发布我的评论作为答案。

您是在尝试检测“异常值”还是“轮廓线”。在这里不仅仅是迂腐,因为它们是不同的统计概念。

【讨论】:

  • 是的,你说得对,我的意思是异常值。对不起我的错误。
【解决方案2】:

发生的情况是,您尝试在没有第 0 行的数据框中设置第 0 行的值。尝试拆分长行并将结果打印到控制台,您可能会发现那样出错。

【讨论】:

  • 好吧,我照你说的做了。我分别打印了每个元素,奇怪的是每个元素都给出了一个值,看起来一切都很好。类型 3 的输出是:[False False False True False False False False False False False False False False False False False] 13.437058823529412 - mean Value, [149 12.16 - DF 中异常值的位置 所以它会找出哪个值是异常值,计算平均值(13.43),以及这个异常值在 DataFrame 中的位置,但当 I' 时仍然给出 KeyError 0我试图将其组合在一行代码中。
猜你喜欢
  • 2019-04-14
  • 2020-03-21
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多