天天看點

esproc vs python 2 簡單計算

1.添加Age、Fullname字段

esproc:

esproc vs python 2 簡單計算

A4:我們用T表示序表。T.derive()表示增加字段。這裡用age(日期)計算出年齡,作為Age字段。用NAME,SURNAME得到Fullname。

A5:計算運算時間(interval:計算時間間隔。@ms表示以毫秒為機關)

python:

import time

import pandas as pd

import datetime

s = time.time()

data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="t")

today = datetime.datetime.today().year

data["Age"] = today-pd.to_datetime(data["BIRTHDAY"]).dt.year

data["Fullname"]=data["NAME"]+data["SURNAME"]

print(data)

e = time.time()

print(e-s)

計算出BIETHDAY字段的值(日期)距今天的年數,作為年齡字段。用NAME+SURNAME作為Fullname字段

結果

esproc:

esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算

2.提取需要的記錄或者字段(前3個字段,第3~10條記錄)

esproc vs python 2 簡單計算

A4:T.new()表示建立序表。這裡以第1,2,3個字段作為新表的字段。T.A,表示取出序列中包含的行号。

data = data.iloc[2:10,:3]

使用df.iloc[]切片獲得3~10條記錄,前三個字段(dataframe的字段号和記錄号都是從0開始計數的)。

結果:

esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算

3.篩選符合條件的記錄

esproc vs python 2 簡單計算

A4:T.select()篩選符合條件的記錄。這裡是篩選STATE=="California"為真的記錄

data = data[data['STATE']=="California"]

取出data['STATE']=="California"的記錄

esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算

4.計算字段的常用值

esproc vs python 2 簡單計算

A4:T.min()計算字段最小值

A5:T.max()計算字段最大值

A6:T.avg()計算字段平均值

A7:T.sum()計算字段總和

A8:計算字段中位數。A.median(k:n)函數,參數全省略時,如果序列長度是奇數傳回中間位置值;如果序列長度是偶數傳回中間兩個值的平均值。

A9:T.variance()計算字段方差。

python

min = data["SALARY"].min()

max = data["SALARY"].max()

avg = data["SALARY"].mean()

sum = data["SALARY"].sum()

median = data["SALARY"].median()

var = data["SALARY"].var()

print(min,max,avg,sum,median,var)

df[字段名]表示取得字段。min(),max(),mean(),sum(),median(),var()分别計算最小值,最大值,平均數,總和,中位數,方差。

esproc vs python 2 簡單計算

5.統計各部門員工的男女人數

esproc vs python 2 簡單計算

A4:T.groups()表示以DEPT分組,計算GENDER==“M”或GENDER==“F”的值,得到各部門男女員工的數量。

group = data.groupby(['DEPT','GENDER']).size()

print(group)

截取GENDER==‘M’或者GENDER==‘F’的切片以DEPT通過goupby()函數得到以DEPT的分組。最後用size()函數得到結果。

esproc:   

esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算

6.統計男女員工的平均年齡

esproc vs python 2 簡單計算

A4:T.groups()用來分組,avg()計算平均值,age()根據日期計算時間間隔。

avg_age = data.groupby('GENDER')['Age'].mean()

print(avg_age)

計算得到Age字段。然後用groupby()函數以GENDER分組,最後通過mean()函數得到平均值。

esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算

7.計算員工薪酬比前一名員工高的最大人數

esproc vs python 2 簡單計算

A4:if(condition,x1,x2)表示如果條件成立,if語句的值為x1,否則值為x2,在這兒計算如果SALARY比前一個員工薪水高的話a=a+1。進而得到A3.(a),其中a随着if語句不斷的變化。最後得到一個序列,max()函數得到最大值。

a=0 ; m=0

for i in data['SALARY'].shift(0)>data['SALARY'].shift(1):

    a=0 if i==False else a+1

    m = a if m < a else m

print(m)

df.shift(0)表示目前記錄,df.shift(n)表示前面第n條記錄,data['SALARY'].shift(0)>data['SALARY'].shift(1) 得到pandas的series結構。循環如果為假(False)表示目前記錄小于或等于上一條記錄,把a置0,如果為真則加1。m的作用:當m

esproc vs python 2 簡單計算
8.每個字段随機設定5-10個缺失值
esproc vs python 2 簡單計算
A4:T.fno()得到序表的字段數量。
B4:T.field(f,x)将x序列中的成員依次指派給A中第F個字段的字段值或者字元串參數F的值。F<0時從後往前排。F越界和不存時不執行 for i in data.columns:     for j in range(random.randint(5,10)):         datai=np.nan 循環所有的字段,随機循環5~10次,将字段的某個随機值設定成np.nan
esproc vs python 2 簡單計算
9.丢棄缺失值
esproc vs python 2 簡單計算
A4:篩選null所在位置為空的記錄,即不包含null的記錄。用r表示記錄,r.array()表示把r中的字段值傳回成序列。A.pos()獲得序列成員序号。
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="t") data = data.dropna() 使用dropna()函數得到不包含np.nan的記錄
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
10.第一列用序列直接替換,其他列的缺失值使用其中的一個随機值填補
esproc vs python 2 簡單計算
A4:T.field(F,A) 将A序列中的成員依次指派給T中第F個字段的字段值或者字元串參數F的值。
B5:篩選字段為null的記錄 B6:差集,得到不為null的記錄 B7:這裡需要特别注意一下field()函數,r.field(F)取得記錄的第F個字段的字段值或者字元串參數F的值。r.field(F,X) 修改記錄r中第F個字段的字段值或者字元串參數F的值為x。A3.select(#${A5}==null)取出A3中某個字段為null的記錄序列,用run()函數循環修改該序列中的每條記錄。 data['EID']=pd.Series([i for i in range(1,len(data)+1)]) for col in data.columns:     nonan_list = list(datacol)])     fill_list = [nonan_list[random.randint(0,len(nonan_list))] for i in range(len(datacol)]))]     datacol)]=fill_list 将字段名為EID的值修改為遞增的序列。這裡用pd.Series()生成。 循環所有字段。dfcol得到df中包含nan的值。~表示非。nonan_list表示目前列不包含nan的所有值組成的list。fill_list表示随機生成的要填充nan的值的list。 将fill_list中的值指派給包含nan的記錄。
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
11.EID字段用序列直接替換,SALARY字段用均值填補缺失值,其他字段的缺失值使用其中的一個随機值填補
esproc vs python 2 簡單計算
上例中,B5,B6的運算會導緻把序列周遊兩遍,這裡進行了改進
B5:A.group(xi) 将序列/排列按照一個或多個字段/表達式進行等值分組,結果為組集構成的序列。這裡是将序表分成兩組,第一組為該字段不包含null的,第二組為包含null的。 B6:取得該字段去重後的字段值 B7:這裡需要特别注意一下field()函數,r.field(F)取得記錄的第F個字段的字段值或者字元串參數F的值。r.field(F,X) 修改記錄r中第F個字段的字段值或者字元串參數F的值為x。r.run(xi,…),針對記錄r計算表達式x,最後傳回記錄r。此函數通常用于修改r的字段值 B9:和B7的原理一樣,利用field()函數修改SALARY的字段值為A8中計算出來的平均值。 for col in list(data.columns)[1:-1]: data['SALARY'].fillna(data['SALARY'].mean(),inplace=True) print(data.loc[180:190]) 循環所有字段第一到倒數第二個字段。dfcol得到df中包含nan的值。~表示非。nonan_list表示目前列不包含nan的所有值組成的list。fill_list表示随機生成的要填充nan的值的list。 df.fillna(df[s].mean())表示用字段s的平均值填充缺失值。
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算
esproc vs python 2 簡單計算