如何在数据帧的每一列上计算修改后的Z得分和IQR

问题描述 投票:1回答:1

我有一个数据框,我正在尝试在分析之前清理数据。

由于我的数据有点复杂,我正在将样本数据进行试用。

A   B	 C	D
30	24	13	41
30	25	14	45
30	27	15	44
30	28	16	43
31	21	12	4
31	2 	17	99
3	89	99	45
78	24	0   43
35	252	12	45
36	23	13	44

我正在尝试处理离群值,并尝试计算Modified Z得分(中位数)和IQR,以便从数据中滤除离群值,以便获得质量数据以进行进一步分析。

我想计算IQR,然后计算每列的Z分数,并过滤出数据框中每列的离群值。

到目前为止,我已经尝试了几件事:

IQR:


for col in df2.columns:
    col = np.array([col])
    q1_a = np.percentile(col, 25)
    q3_a = np.percentile(col, 75)
    iqr1 = q3_a - q1_a
    print(iqr1)

修改的Z分数:


for col in df2.columns:
    threshold = 3.5
    col_zscore = col +'_zscore'
    median_y = df[col].median()
    print(median_y)
    median_absolute_deviation_y = (np.abs(df2[col] - median_y)).median()
    print(median_absolute_deviation_y)
    modified_z_scores = 0.7413 *((df2[col] - median_y)/median_absolute_deviation_y)
    print(modified_z_scores)
    df2[col_zscore] = np.abs(modified_z_scores)

df2 = df2[(np.abs(df2[col_zscore]) < 3.5).all(axis=1)]
print(df2)

但未获得正确答案。该函数不适用于每一列,并在最后创建我想要的数据框。请帮忙。谢谢。

python python-3.x dataframe outliers iqr
1个回答
0
投票

对于IQR问题:

  Weight    Age
0   40      20
1   62      21
2   35      19
3   29      18

如果您的数据框是这样的,则可以使用以下代码来计算IQR。

for col in df2.columns:
    col_values = df2[col]
    col_values = np.array([col_values])
    q1_a = np.percentile(col_values, 25)
    q3_a = np.percentile(col_values, 75)
    iqr1 = q3_a - q1_a
    print(iqr1)

如果所有数据列都包含数字数据,则可以使用上面的代码来计算IQR,否则您需要先将分类数据列编码为数字。如果期望特定的IQR值,请查看numpy percentile interpolation参数。

对于Z_score问题:

median_y = df[col].median()

我认为这里的'df'应该更改为'df2'。但是,您的要求不清楚。

© www.soinside.com 2019 - 2024. All rights reserved.