esproc vs python 2 简单计算

1.添加Age、Fullname字段

esproc:

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:

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中的函数功能很强大,需要不断的使用,来充分理解函数的用法,达到熟能生巧最终精通的地步。


EMPLOYEE.txt

EMPLOYEE_nan.txt

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容