网站ip做网站,企业网站制作价格,自助推广平台,网站不备案会怎样先要有一个很简单的被命名为 data 的表#xff1a; 第三列是一个名曰周杰伦的人历年来每个月的月薪#xff0c;其中2016年月薪10万#xff0c;纵观他历年来的月薪基本不超过3万#xff08;显然他不是我的偶像胖伦#xff09;#xff0c;因此对于这个人来说月薪10万是有些…先要有一个很简单的被命名为 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 uD:\\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, howleft, 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)indexindexrowrow。如果for循环中只定义一个变量 row 则 row 就是整个元组。论方便的话还是定义两个变量吧。
很简单的功能对吧代码也很简单大神们就用不着了新手们可以了解一下。
iterrows()的官网地址
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iterrows.htm