先要有一个很简单的被命名为 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,Seriesdatafile = u'D:\\pythondata\\learn\\iterrows.xlsx'
data = pd.read_excel(datafile)
data = DataFrame(data)#首先将每一年对应的去年的月薪生成一列新的数据,匹配到最后一列
data_q1 = data[['name', 'year', 'monthly_pay']].copy()
data_q1['year'] = data['year']+1
data_q1.rename(columns={'monthly_pay':'monthly_pay_q1'}, inplace = True)
data = pd.merge(data, data_q1, how='left', left_on=['name','year'], right_on=['name','year'])for index,row in data.iterrows():if ((row['monthly_pay']) >= (2 * (row['monthly_pay_q1']))) & (row['monthly_pay_q1']<= 5):data.at[index, 'monthly_pay'] = (2 * (data.at[index,'monthly_pay_q1'])).astype(int)
data = data[['name', 'year', 'monthly_pay']]

更改后的data表:

iterrows()返回值为元组(index,row) ,for循环定义了两个变量,index, row,那么返回的元组(index,row),index=index,row=row。如果for循环中只定义一个变量 row ,则 row 就是整个元组。论方便的话还是定义两个变量吧。

很简单的功能对吧,代码也很简单,大神们就用不着了,新手们可以了解一下。

iterrows()的官网地址:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.htm


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

  1. stata怎么判断是否存在异常值_利用统计方法,辨别和处理数据中的异常值

    在建模时,清理数据样本非常重要,这样做可以确保观察结果充分代表问题.有时,数据集可能包含超出预期范围之外的极端值.这通常被称为异常值,通过理解甚至去除这些异常值,能够改进机器学习建模和模型技能. 在本 ...

  2. pandas遍历dataframe的行:迭代遍历dataframe的数据行、iterrows函数、itertuple函数

    pandas遍历dataframe的行:迭代遍历dataframe的数据行.iterrows函数.itertuple函数 目录 pandas遍历dataframe的行:迭代遍历dataframe的数据 ...

  3. python 遍历_python中使用iterrows()对dataframe进行遍历的示例

    假设我们有一个很简单的OTU表: 现在对这个表格进行遍历,一般写法为: import pandas as pd otu = pd.read_csv("otu.txt",sep=&q ...

  4. pandas 遍历并修改_Pandas循环提速7万多倍!Python数据分析攻略

    乾明 编译整理  量子位 报道 | 公众号 QbitAI 用Python和Pandas进行数据分析,很快就会用到循环. 但在这其中,就算是较小的DataFrame,使用标准循环也比较耗时. 遇到较大的 ...

  5. Java实现无向图的邻接列表表示,深度遍历及广度遍历

    图 1. 图的表示 2. 图的分类 3. 图的表示 4. 图的遍历 5. 源码 5.1 图的邻接列表表示 5.1 邻接列表宽度优先.深度优先遍历 1. 图的表示 图用 G = (V,E)表示.V表示顶 ...

  6. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)

    目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...

  7. python数据结构与算法:二叉树及三种遍历方式(先序遍历/中序遍历/后序遍历)

    树的实现采用queue的形式: 树的三种遍历方式(广度优先白能力法):先序遍历(根左右),中序遍历(左根右)以及后序遍历(左右根) ######################P6.4 数据结构### ...

  8. 循环遍历和迭代器遍历如何选择

    对于数据的遍历,常见的操作方式有两种:循环遍历和迭代器遍历.有时候,我们容易混淆这两种遍历方式,误以为这两种方式并没有根本就没有什么大的区别. 1.定义 (1)循环遍历:一般而言,我们常见的while ...

  9. pandas使用extract函数根据正则表达式从dataframe指定数据列的字符串中抽取出数字并生成新的数据列(extract numbers from column)

    pandas使用extract函数根据正则表达式从dataframe指定数据列的字符串中抽取出数字并生成新的数据列(extract numbers from column and generate n ...

最新文章

  1. 将人工智能模型压缩到微控制器中
  2. 多重背包 (poj 1014)
  3. python语句块标记_Python简单语句
  4. JavaScript内存释放
  5. NOIP信息奥赛--1995“同创杯”初中复赛题题解(五)
  6. Spring 钩子之BeanFactoryPostProcessor和BeanPostProcessor
  7. AliExpress智能营销引擎大揭秘 - AnalyticDB如何做到快准狠省
  8. 二级指针、数组指针、二维数组、指针数组作为函数形参时可传入的实参
  9. 股权证明pos记账权是根据不同节点_中币(ZB)说真的,区块链第四期:关于ETH2.0,你需要了解的——PoS...
  10. bat语句中“1>2”是什么意思?
  11. 第 91 章 SMS
  12. vivado 开发教程(四) 行为仿真
  13. ARCore之路-环境配置
  14. Android - Bootloader? root原理?Recovery? SuperSU?Magisk?Xposed?ROM包?这都啥玩意?
  15. 一个出生偏远山区挨个饿90后的触景生情
  16. stata怎么画分类图_stata如何画分布图
  17. Oracle数据库之日期函数
  18. URL重写有几种方式
  19. 华硕飞行堡垒无线网卡9462黄色感叹号
  20. 挑战杯课外学术科技作品竞赛如何冲入国赛

热门文章

  1. Android App优化之ANR详解
  2. Android基础字符串String.md
  3. [推荐]VMware Workstation 6.5虚拟机(汉化补丁+注册机+原版安装文件)
  4. 成功:选择比努力更重要,智慧比勤奋更重要
  5. Redis之压缩列表ziplist
  6. 这5个bug我不信你没有写过
  7. 如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart?
  8. 做算法,为什么建议你一定要学懂C++?
  9. linux tar 使用
  10. mysql中定时任务_mysql中定时任务的用法