当我试图从数据集中删除异常值时,我会收到以下警告:
码
def remout(df):
Q1 = df.quantile(0.02)
Q3 = df.quantile(0.98)
IQR = Q3 - Q1
df = df[~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)]
return df
df=remout(df)
df警告消息
FutureWarning: Automatic reindexing on DataFrame vs Series comparisons is deprecated and will raise ValueError in a future version. Do `left, right = left.align(right, axis=1, copy=False)` before e.g. `left == right`
df = df[~((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)]发布于 2022-07-04 21:44:39
首先,您没有指定要从哪个列中省略异常值,如果您的dataframe有一个列,很好,但是一般来说,您必须给出一个dataframe和一个列作为这个函数的输入。
第二,四分位数或IQR定义为第75百分位数和第25百分位数之间的差异。因此,您作为Q1和Q3引入的数字是错误的。
第三,您在函数中使用的逻辑存在问题,这将解决这个问题,而无需任何未来的警告:
def remout(df, col):
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1
print(Q1, Q3, IQR)
df = df[(df[col] > (Q1 - 1.5 * IQR)) & (df[col] < (Q3 + 1.5 * IQR))]
return df
df=remout(df, 'col_name')指定要从其中移除异常值的列的名称,而不是col_name。
https://stackoverflow.com/questions/72369489
复制相似问题