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