首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pandas数据集上应用IQR时警告“自动重索引”

在Pandas数据集上应用IQR时警告“自动重索引”
EN

Stack Overflow用户
提问于 2022-05-24 21:08:06
回答 1查看 84关注 0票数 0

当我试图从数据集中删除异常值时,我会收到以下警告:

代码语言:javascript
复制
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

警告消息

代码语言:javascript
复制
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)]
EN

回答 1

Stack Overflow用户

发布于 2022-07-04 21:44:39

首先,您没有指定要从哪个列中省略异常值,如果您的dataframe有一个列,很好,但是一般来说,您必须给出一个dataframe和一个列作为这个函数的输入。

第二,四分位数或IQR定义为第75百分位数和第25百分位数之间的差异。因此,您作为Q1和Q3引入的数字是错误的。

第三,您在函数中使用的逻辑存在问题,这将解决这个问题,而无需任何未来的警告:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72369489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档