1.添加Age、Fullname字段
esproc:python
A4:咱們用T表示序表。T.derive()表示增長字段。這裏用age(日期)計算出年齡,做爲Age字段。用NAME,SURNAME獲得Fullname。dom
A5:計算運算時間(interval:計算時間間隔。@ms表示以毫秒爲單位)函數
python:url
import time.net
import pandas as pd3d
import datetimeblog
s = time.time()字符串
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")get
today = datetime.datetime.today().yearpandas
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:
python:
2.提取須要的記錄或者字段(前3個字段,第3~10條記錄)
esproc:
A4:T.new()表示新建序表。這裏以第1,2,3個字段做爲新表的字段。T.A,表示取出序列中包含的行號。
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")
data = data.iloc[2:10,:3]
print(data)
e = time.time()
print(e-s)
使用df.iloc[]切片得到3~10條記錄,前三個字段(dataframe的字段號和記錄號都是從0開始計數的)。
結果:
esproc:
python:
3.篩選符合條件的記錄
esproc:
A4:T.select()篩選符合條件的記錄。這裏是篩選STATE=="California"爲真的記錄
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")
data = data[data['STATE']=="California"]
print(data)
e = time.time()
print(e-s)
取出data['STATE']=="California"的記錄
結果:
esproc:
python:
4.計算字段的經常使用值
A4:T.min()計算字段最小值
A5:T.max()計算字段最大值
A6:T.avg()計算字段平均值
A7:T.sum()計算字段總和
A8:計算字段中位數。A.median(k:n)函數,參數全省略時,若是序列長度是奇數返回中間位置值;若是序列長度是偶數返回中間兩個值的平均值。
A9:T.variance()計算字段方差。
python
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")
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)
e = time.time()
print(e-s)
df[字段名]表示取得字段。min(),max(),mean(),sum(),median(),var()分別計算最小值,最大值,平均數,總和,中位數,方差。
結果
5.統計各部門員工的男女人數
esproc:
A4:T.groups()表示以DEPT分組,計算GENDER==「M」或GENDER==「F」的值,獲得各部門男女員工的數量。
python
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")
group = data.groupby(['DEPT','GENDER']).size()
print(group)
e = time.time()
print(e-s)
截取GENDER==‘M’或者GENDER==‘F’的切片以DEPT經過goupby()函數獲得以DEPT的分組。最後用size()函數獲得結果。
結果:
esproc:
python:
6.統計男女員工的平均年齡
esproc:
A4:T.groups()用來分組,avg()計算平均值,age()根據日期計算時間間隔。
python
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")
data["Age"] = today-pd.to_datetime(data["BIRTHDAY"]).dt.year
avg_age = data.groupby('GENDER')['Age'].mean()
print(avg_age)
e = time.time()
print(e-s)
計算獲得Age字段。而後用groupby()函數以GENDER分組,最後經過mean()函數獲得平均值。
結果:
esproc:
python:
7.計算員工薪酬比前一名員工高的最大人數
esproc:
A4:if(condition,x1,x2)表示若是條件成立,if語句的值爲x1,不然值爲x2,在這兒計算若是SALARY比前一個員工薪水高的話a=a+1。從而獲得A3.(a),其中a隨着if語句不斷的變化。最後獲得一個序列,max()函數獲得最大值。
python
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")
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)
e = time.time()
print(e-s)
df.shift(0)表示當前記錄,df.shift(n)表示前面第n條記錄,data['SALARY'].shift(0)>data['SALARY'].shift(1) 獲得pandas的series結構。循環若是爲假(False)表示當前記錄小於或等於上一條記錄,把a置0,若是爲真則加1。m的做用:當m<a時,把a賦值給m,不然m不變,最終獲得a的最大值。
結果:
8.每一個字段隨機設置5-10個缺失值
esproc:
A4:T.fno()獲得序表的字段數量。
B4:T.field(f,x)將x序列中的成員依次賦值給A中第F個字段的字段值或者字符串參數F的值。F<0時從後往前排。F越界和不存時不執行
python:
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE.txt",sep="\t")
for i in data.columns:
for j in range(random.randint(5,10)):
data[i][random.randint(0,500)]=np.nan
print(data)
e = time.time()
print(e-s)
循環全部的字段,隨機循環5~10次,將字段的某個隨機值設置成np.nan
結果:
9.丟棄缺失值
esproc:
A4:篩選null所在位置爲空的記錄,即不包含null的記錄。用r表示記錄,r.array()表示把r中的字段值返回成序列。A.pos()得到序列成員序號。
python:
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="\t")
data = data.dropna()
print(data)
e = time.time()
print(e-s)
使用dropna()函數獲得不包含np.nan的記錄
結果:
10.第一列用序列直接替換,其餘列的缺失值使用其中的一個隨機值填補
esproc:
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()函數循環修改該序列中的每條記錄。
python:
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="\t")
data['EID']=pd.Series([i for i in range(1,len(data)+1)])
for col in data.columns:
nonan_list = list(data[col][~pd.isna(data[col])])
fill_list = [nonan_list[random.randint(0,len(nonan_list))] for i in range(len(data[col][pd.isna(data[col])]))]
data[col][pd.isna(data[col])]=fill_list
e = time.time()
print(e-s)
將字段名爲EID的值修改成遞增的序列。這裏用pd.Series()生成。
循環全部字段。df[col][pd.isna(df)]獲得df中包含nan的值。~表示非。nonan_list表示當前列不包含nan的全部值組成的list。fill_list表示隨機生成的要填充nan的值的list。
將fill_list中的值賦值給包含nan的記錄。
結果:
esproc:
python
11.EID字段用序列直接替換,SALARY字段用均值填補缺失值,其餘字段的缺失值使用其中的一個隨機值填補
esproc:
上例中,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中計算出來的平均值。
python:
s = time.time()
data = pd.read_csv("C:/Users/Sean/Desktop/esproc_vs_python/EMPLOYEE_nan.txt",sep="\t")
data['EID']=pd.Series([i for i in range(1,len(data)+1)])
for col in list(data.columns)[1:-1]:
nonan_list = list(data[col][~pd.isna(data[col])])
fill_list = [nonan_list[random.randint(0,len(nonan_list))] for i in range(len(data[col][pd.isna(data[col])]))]
data[col][pd.isna(data[col])]=fill_list
data['SALARY'].fillna(data['SALARY'].mean(),inplace=True)
print(data.loc[180:190])
print(e-s)
將字段名爲EID的值修改成遞增的序列。這裏用pd.Series()生成。
循環全部字段第一到倒數第二個字段。df[col][pd.isna(df)]獲得df中包含nan的值。~表示非。nonan_list表示當前列不包含nan的全部值組成的list。fill_list表示隨機生成的要填充nan的值的list。
將fill_list中的值賦值給包含nan的記錄。
df.fillna(df[s].mean())表示用字段s的平均值填充缺失值。
結果:
esproc:
python
小結:本節咱們用11個例子對數據進行簡單的計算,esproc和python都用到了比較多的函數,還用到了一些相對複雜的組合應用,這就不得不說esproc現階段的一個缺點了,查閱資料和使用案例相對於python太少了,緣由就是使用者太少。可是在描述效率和執行效率方面,esproc的優點太明顯了,所以咱們要多使用esproc提升工做效率,同時也能夠完善esproc的缺點。esproc中的函數功能很強大,須要不斷的使用,來充分理解函數的用法,達到熟能生巧最終精通的地步。