打印dataframe中存在异常值的列

2024-06-17 06:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧(250×25),其中20列具有数值(int64和float64的混合)

我想打印包含异常值的列

mydata = pd.read_csc('data.csv')
df = mydata.select_dtypes(include=np.number)
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df = df[((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)]
print(df.columns)

我通过excel发现只有4列有异常值。我不知道怎么弄到它们


Tags: csv数据dfreaddata数值pdfloat64
1条回答
网友
1楼 · 发布于 2024-06-17 06:21:49

以下是数据:

import pandas as pd
import numpy as np

np.random.seed(111)
mydata = pd.DataFrame(np.random.uniform(0,1,(5,4)),columns=['c1','c2','c3','c4'])
df = mydata.select_dtypes(include=np.number)

    c1  c2  c3  c4
0   0.612170    0.169070    0.436059    0.769262
1   0.295325    0.149163    0.022478    0.420224
2   0.238682    0.337656    0.990712    0.237726
3   0.081193    0.669600    0.621243    0.274254
4   0.466221    0.118368    0.073958    0.900774

不应该有异常值。我们尝试您的布尔值:

((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=1)
0    False
1    False
2    False
3    False
4    False

这将返回错误的行布尔值。您需要在另一个轴上执行此操作,还需要在列上执行此操作:

df.columns[((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=0)]

让我们将异常值放在两列中,应该返回c3和c4:

df.iloc[1,2] = 1.8
df.iloc[2,3] = 2.5
df.columns[((df < (Q1 - 1.5 * IQR)) |(df > (Q3 + 1.5 * IQR))).any(axis=0)]

Index(['c3', 'c4'], dtype='object')

相关问题 更多 >