异常值处理 - iterrows()对 DataFrame 进行遍历,并修改遍历中的异常值 - Python代码

本文介绍如何利用Python的pandas库中的iterrows()方法遍历DataFrame,识别并处理异常值。通过比较每年月薪与前一年的关系,当今年月薪超过去年2倍且去年月薪低于5万时,将今年月薪设为去年的2倍值。这种方法避免了误删正常数据,适合数据预处理阶段。
摘要由CSDN通过智能技术生成

先要有一个很简单的被命名为 data 的表:

 第三列是一个名曰周杰伦的人历年来每个月的月薪,其中2016年月薪10万,纵观他历年来的月薪基本不超过3万(显然他不是我的偶像胖伦),因此对于这个人来说月薪10万是有些异常的。

有些人可能会说,这不简单?直接:【 data[monthly_pay] [data[monthly_pay] >= 10] = null 】就好了啊,可是你忘记了,周杰伦挣不了10万,可是库克完全没压力啊。你这么一句python运行下去,表里关于库克的月薪数据都要被删掉了。

那么,怎么识别到这个10万的数据,进而修改它呢?

我们采用每年和去年的月薪相比的方式,即:若今年的月薪超过去年的 2 倍,且去年的月薪在 5 万以下的,我们将修改今年的月薪为去年月薪的 2 倍值。

首先需要用 iterrows() 遍历这个表,找出异常值,然后修改就好了,下面是 python 代码:

# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np
from pandas import DataFrame,Series

datafile = u'D:\\pythondata\\learn\\iterrows.xlsx'
data = pd.read_ex
可以使用以下代码来查找每行异常值: ```python import pandas as pd # 创建一个包含异常值DataFrame data = {'A': ['张三', '李四', '王五', '赵六', '钱七', '孙八'], 'B': ['男', '女', '男', '女', '女', '男'], 'C': ['北京', '上海', '广州', '深圳', '重庆', '成都'], 'D': [100, 200, 300, 400, 500, 1000], 'E': [200, 400, 600, 800, 1000, 2000], 'F': [300, 600, 900, 1200, 1500, 3000]} df = pd.DataFrame(data) # 定义一个函数来查找异常值 def find_outliers(row): q1 = row.iloc[3:].quantile(0.25) q3 = row.iloc[3:].quantile(0.75) iqr = q3 - q1 outliers = row.iloc[3:][(row.iloc[3:] < q1 - 1.5 * iqr) | (row.iloc[3:] > q3 + 1.5 * iqr)] return outliers # 对每一行应用函数并输出结果 for i, row in df.iterrows(): outliers = find_outliers(row) if len(outliers) > 0: print("Row {} has outliers: {}".format(i, outliers.tolist())) else: print("Row {} has no outliers".format(i)) ``` 该代码首先创建一个包含异常值DataFrame,其前三列是汉字,后面的列是。然后定义了一个函数 `find_outliers()` 来查找每行异常值。该函数使用四分位数和四分位距(IQR)来计算异常值,并返回一个包含异常值的Series对象。 接下来,对于每一行,我们都应用 `find_outliers()` 函数,并输出结果。如果该行异常值,则输出异常值的列表。否则,输出该行没有异常值。需要注意的是,我们使用了 `df.iterrows()` 来遍历DataFrame的每一行,然后使用 `iloc` 来选择第3列及之后的列进行计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值