热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

esprocvspython5

1.列出分期贷款明细题目介绍:loan表存储着贷款信息,包括贷款ID,贷款总额、按月分期数、年利率。数据如下:我们的目的是

1. 列出分期贷款明细

题目介绍:loan 表存储着贷款信息,包括贷款 ID,贷款总额、按月分期数、年利率。数据如下:

我们的目的是列出各期明细,包括:当期还款额、当期利息、当期本金、剩余本金。

esproc

 

A

1

=now()

2

=file("C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\loan.csv").import@t()

3

=A2.derive(Rate/100/12:mRate,LoanAmt*mRate*power((1+mRate),Term)/(power((1+mRate),Term)-1):mPayment)

4

=A3.news((t=LoanAmt,Term);LoanID,   LoanAmt, mPayment:payment, Term, Rate, t* mRate:interest,   payment-interest:principal, t=t-principal:principlebalance)

5

=interval@ms(A1,now())

A3:T.derive()新增两列月利率mRate=年利率/12,每期还款数mPayment=总利息/((1+月利率)的期数次幂)-1

A4:A.news(X;xi:Fi,…),根据序表/排列A,计算排列X后把计算后的字段合并到一个新的序表/排列,Fi为新字段名,xi为计算结果,Fi省略自动识别。当参数xi使用#i时,表示第i列,此时使用原列名。这里解释一下,将t的初始值设置为A3中的LoanAmt的值作为初始的本金,然后建立新表,其中利息interest=本金*月利率mRate,当期偿还的本金principal等于每期还款数payment-利息,剩余的本金=本金t-当期偿还的本金,然后把剩余的本金更新到t作为下一期的本金。

python:

import time

import numpy as np

import pandas as pd

s = time.time()

loan_data = pd.read_csv('C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\loan.csv',sep='\t')

loan_data['mrate'] = loan_data['Rate']/(100*12)

loan_data['mpayment'] = loan_data['LoanAmt']*loan_data['mrate']*np.power(1+loan_data['mrate'],loan_data['Term']) \

                        /(np.power(1+loan_data['mrate'],loan_data['Term'])-1)

loan_term_list = []

for i in range(len(loan_data)):

    loanid = np.tile(loan_data.loc[i]['LoanID'],loan_data.loc[i]['Term'])

    loanid = np.tile(loan_data.loc[i]['LoanID'],loan_data.loc[i]['Term'])

    loanamt = np.tile(loan_data.loc[i]['LoanAmt'],loan_data.loc[i]['Term'])

    term = np.tile(loan_data.loc[i]['Term'],loan_data.loc[i]['Term'])

    rate = np.tile(loan_data.loc[i]['Rate'],loan_data.loc[i]['Term'])

    payment = np.tile(np.array(loan_data.loc[i]['mpayment']),loan_data.loc[i]['Term'])

    interest = np.zeros(len(loanamt))

    principal = np.zeros(len(loanamt))

    principalbalance  = np.zeros(len(loanamt))

    loan_amt = loanamt[0]

    for j in range(len(loanamt)):

        interest[j] = loan_amt*loan_data.loc[i]['mrate']

        principal[j] = payment[j] - interest[j]

        principalbalance[j] = loan_amt - principal[j]

        loan_amt = principalbalance[j]

    loan_data_df = pd.DataFrame(np.transpose(np.array([loanid,loanamt,term,rate,payment,interest,principal,principalbalance])),

                columns = ['loanid','loanamt','term','rate','payment','interest','principal','principalbalance'])

    loan_term_list.append(loan_data_df)

loan_term_pay = pd.concat(loan_term_list,ignore_index=True)

print(loan_term_pay)

e = time.time()

print(e-s)

新增两列mrate和mpayment,mpayment的计算方法和esproc的一样,大家可以参考。

初始化一个空列表用于存放每一个贷款客户的数据。

循环数据

Df.loc[i][x]取索引为i字段名为x的数据,tile(a,x),x是控制a重复几次的,结果是一个一维数组。

同样的方法获得贷款的'loanid','loanamt','term','rate','payment'的字段值,

初始化一个本金为loanamt的第一个元素。

for循环就是计算['interest','principal','principalbalance']这三个字段值的方法,思路和esproc的思路一样,只不过esproc支持动态计算而python只能通过构造这个for循环来完成。

Np.array()将list格式的列表转换成数组。由于这里的行表示的是每一个字段的值,np.transpose(a)是将数组a转置。pd.DataFrame()转成dataframe结构。

pd.concat()将每个贷款的分期信息合并成一个dataframe。

结果:

esproc

python

 

耗时

esproc

0.005

python

0.034

 

2.不规则月份统计

题目介绍:如果起始时间是 2014-01-10,则将 2014-01-10 到 2014-02-09 作为一组,将 2014-02-10 到 2014-03-9 作为一组。如果起始时间是 2014-01-31,则将 2014-02-27 作为一组,将 2014-02-28 到 2014-03-30 作为一组。数据如下:

我们的目的是统计出不规则月份的销售额AMOUNT。

esproc

 

A

1

=now()

2

=file("C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\order_date.csv").import@t()

3

&#61;A2.select(date(date)>&#61;startDate&&date(date)<&#61;endDate)

4

&#61;interval&#64;m(startDate,endDate)

5

&#61;startDate|A4.(after&#64;m(startDate,~))

6

&#61;A3.group(A5.pseg(date):ID;~.sum(AMOUNT):amount,A5(#):date)

7

&#61;interval&#64;ms(A1,now())

我们首先需要设置网格参数startDate&#xff0c;endDate(程序——网格参数)

A3:筛选出指定时间的时间段

A4:按月计算开始时间和起始时间的间隔

A5:after(start,n)计算从开始时间以后的n天&#xff0c;&#64;m选项表示按月计算&#xff0c;即开始时间以后的n个月。根据起始时间和日期间隔算出不规则月份的开始日期&#xff0c;并将起始时间插入第1位。

A6: A.pseg(x)&#xff0c;返回x在A中的哪一段&#xff0c;缺省序列成员组成左闭右开的区间&#xff0c;A必须为有序序列。 x非A成员时&#xff0c;如果序列升序时x小于序列成员最小值(或序列降序时x大于序列成员最大值)则返回0&#xff1b;如果序列升序时x大于等于序列成员最大值(或序列降序时x小于等于序列成员最小值)则返回序列长度。将日期所在分组作为ID&#xff0c;销售额之和作为amount字段&#xff0c;当前日期作为date字段&#xff0c;形成序表。

python&#xff1a;

import time

import pandas as pd

import numpy as np

import datetime

s &#61; time.time()

starttime_s &#61; &#39;2012-11-29&#39;

endtime_s &#61; &#39;2013-11-11&#39;

starttime &#61; datetime.datetime.strptime(starttime_s, &#39;%Y-%m-%d&#39;)

endtime &#61; datetime.datetime.strptime(endtime_s, &#39;%Y-%m-%d&#39;)

orders &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\order_date.csv&#39;,sep&#61;&#39;\t&#39;)

orders[&#39;date&#39;] &#61; pd.to_datetime(orders[&#39;date&#39;])

orders&#61;orders[orders[&#39;date&#39;]>&#61;starttime]

orders&#61;orders[orders[&#39;date&#39;]<&#61;endtime]

date_index &#61; pd.date_range(start &#61; starttime,end&#61;endtime,freq&#61;&#39;M&#39;)

interv &#61; date_index.day

date_list &#61; []

date_amount &#61; []

for i in range(len(interv)):

    if starttime>&#61;date_index[i]:

        date_list.append(date_index[i])

    else:

        date_list.append(starttime)

    starttime &#61; starttime &#43; datetime.timedelta(days&#61;int(interv[i]))

    if len(date_list)>1:

        by &#61; orders[&#39;date&#39;].apply(lambda x:date_list[i]>x>&#61;date_list[i-1])

        date_amount.append([orders[by][&#39;AMOUNT&#39;].sum(),date_list[i-1]])

by &#61; orders[&#39;date&#39;].apply(lambda x:x>&#61;date_list[i])

date_amount.append([orders[by][&#39;AMOUNT&#39;].sum(),date_list[i]])

date_amount_df &#61; pd.DataFrame(date_amount,columns&#61;[&#39;amount&#39;,&#39;date&#39;])

print(date_amount_df)

date_df &#61; pd.Series(date_list)

e &#61; time.time()

print(e-s)

小编没有找到pandas中自动生成不规则月份的方法&#xff0c;所以是自己写的&#xff0c;如果各位谁知道这种方法&#xff0c;还请不吝赐教。

指定起始时间和终止时间

datetime.datetime.strptime(str, &#39;%Y-%m-%d&#39;)将字符串的日期格式转换为日期格式

pd.to_datetime()将date列转换成日期格式

筛选出指定时间段的数据

pd.date_range(start,end,freq)从开始时间到结束时间以freq的间隔生成时间序列&#xff0c;这里是按月生成。(这里作出说明&#xff0c;生成的序列成员是每个月的最后一天的日期)

date_index.day生成了这个序列中所有月份的天数

初始化两个list&#xff0c;date_list用来存放不规则日期的起始时间&#xff0c;date_amount用来存放各个时间段内的销售额和时间

循环月份总成的天数&#xff0c;如果起始时间晚于这个月的最后一天&#xff0c;则把这个月的最后一天放入date_list&#xff0c;否则把起始时间放入&#xff0c;然后更新起始时间为起始时间推迟该月的天数后的日期。

如果date_list中的日期数量大于1了&#xff0c;生成一个数组&#xff08;判断数据中每个日期是否在该段时间段内&#xff0c;在为True&#xff0c;否则为False&#xff09;。

筛选出在该时间段内数据中的销售额AMOUNT字段&#xff0c;求其和&#xff0c;并将其和日期放入初始化的date_amount列表中。

pd.DataFrame()生成结果

结果&#xff1a;

esproc

python

 

耗时

esproc

0.003

python

0.039

 

3.字段分段

题目介绍&#xff1a;库表data有两个字段&#xff0c;ID和ANOMOALIES&#xff0c;数据如下&#xff1a;

 

我们的目的是将ANOMOALIES字段按空格拆分为多个字符串&#xff0c;每个字符串和原ID字段形成新的记录。

esproc

 

A

1

&#61;now()

2

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\split_field.csv").import&#64;t()

3

&#61;A2.news(ANOMALIES.split(" ");ID,~:ANOMALIES)

4

&#61;interval&#64;ms(A1,now())

A4&#xff1a;news函数的用法在第一例中已经解释过&#xff0c;这里不再赘述。

python&#xff1a;

import time

import pandas as pd

import numpy as np

s &#61; time.time()

split_field &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\split_field.csv&#39;,sep&#61;&#39;\t&#39;)

split_dict &#61; split_field.set_index(&#39;ID&#39;).T.to_dict(&#39;list&#39;)

split_list &#61; []

for key,value in split_dict.items():

    anomalies &#61; value[0].split(&#39; &#39;)

    key_array &#61; np.tile(key,len(anomalies))

    split_df &#61; pd.DataFrame(np.array([key_array,anomalies]).T,columns&#61;[&#39;ID&#39;,&#39;ANOMALIES&#39;])

    #split_df &#61; pd.DataFrame(np.transpose(np.array([key_array,anomalies])),columns&#61;[&#39;ID&#39;,&#39;ANOMALIES&#39;])

    split_list.append(split_df)

split_field &#61; pd.concat(split_list,ignore_index&#61;True)

print(split_field)

e &#61; time.time()

print(e-s)

df.set_index(F)设置索引为F&#xff0c;df.T,将df的行列转置&#xff0c;df.to_dict(‘list’)将dataframe转换成字典&#xff0c;字段的key为df的字段名&#xff0c;value为df的字段值形成的list。

初始化一个空list&#xff0c;用于存放每个ANOMALIES字段拆分以后的dataframe

循环字典

将value的第一个元素按照空格切分&#xff0c;形成一个列表anomalies

根据这个列表长度复制key的值&#xff0c;形成数组key_array

将np.array([key_array,anomalies])将他们转换成数组&#xff0c;array.T&#xff0c;将数组转置(转置也可以用注释掉的那行代码np.traspose()函数)&#xff0c;然后由pd.DataFrame()转成dataframe。

最后连接dataframe&#xff0c;得到结果。

结果&#xff1a;

esproc

 

python

 

耗时

esproc

0.002

python

0.013

 

4.增加增长率记录

esproc                     

 

A

1

&#61;now()

2

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\store_quantity.csv").import&#64;t()

3

&#61;A2.sort(Year).group(item).run(A2.record(["Growth   Rate",item,~(2).quantity/~(1).quantity-1]))

4

&#61;interval&#64;ms(A1,now())

A4&#xff1a;T.sort(x)&#xff0c;按照x表达式排序&#xff0c;T.group(x)按照x表达式分组。A.run(x)&#xff0c;针对序列/排列A中每个成员计算表达式x。T.record(A,k) 从T中指定位置k的记录开始&#xff0c;用A的成员依次修改T序表中记录的每个字段值&#xff0c;k省略时从最后一条开始增加记录。~表示当前分组&#xff0c;~(2)表示第二条记录即2015年的记录&#xff0c;~(1)表示2014年的记录。这里的过程是先按照Year字段排序&#xff0c;然后按照item分组&#xff0c;然后新增两条记录&#xff0c;分别是各种物品的增长率。

python&#xff1a;

import time

import pandas as pd

import numpy as np

s &#61; time.time()

store_q &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\store_quantity.csv&#39;,sep&#61;&#39;\t&#39;)

store_q.sort_values(by&#61;&#39;Year&#39;,inplace &#61; True)

store_q_g &#61; store_q.groupby(by&#61;&#39;item&#39;,as_index&#61;False)

growth_rate_list&#61;[]

for index,group in store_q_g:

    growth_rate &#61; group[&#39;quantity&#39;]/group[&#39;quantity&#39;].shift(1)-1

    growth_rate_list.append([&#39;growth_rate&#39;,index,growth_rate.values[1]])

store_rate &#61; pd.concat([store_q,pd.DataFrame(growth_rate_list,columns&#61;[&#39;Year&#39;,&#39;item&#39;,&#39;quantity&#39;])])   

print(store_rate)

e &#61; time.time()

print(e-s)

df.sort_values(by,inplace),按照Year字段排序&#xff0c;更新到元数据中

df.groupby(by, as_index),按照item分组&#xff0c;不把item作为索引

初始化一个list用来存放各组的结果

循环分组&#xff0c;df.shift(1)是将df下移一行&#xff0c;&#xff08;当前行/上一行&#xff09;-1得到增长率。

由于只有两年的记录所以增长率的第二个元素即为需要的增长率。将growth_rate,index,增长率放入初始化的list中

pd.Dataframe()和pd.concat()大家应该很熟了&#xff0c;这里不再赘述了。

结果&#xff1a;

esproc

python

 

耗时

esproc

0.001

python

0.014

 

5.合并重复记录

题目介绍&#xff1a;该数据没有字段&#xff0c;第一行就是数据&#xff0c;数据如下&#xff1a;

我们的目的是过滤掉重复的记录&#xff0c;取出前6列&#xff0c;并重整第7,8两列&#xff0c;具体要求是&#xff1a;将wrok phone作为新文件第7列&#xff0c;将work email作为新文件第8列&#xff0c;如果有多个work phone或work email,则只取第一个。

esproc

 

A

1

&#61;now()

2

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\merge_duplicate.csv").import&#64;c()

3

&#61;A2.group(_1,_2:,_3,_4,_5,_6;~.select&#64;1(_7&#61;&#61;"work   phone")._8:work_phone,~.select&#64;1(_7&#61;&#61;"work   email")._8:work_email)

4

&#61;interval&#64;ms(A1,now())

A2:这里解释下f.import(),导入数据&#xff0c;&#64;t是要把第一列作为字段名&#xff0c;&#64;c是按照逗号分隔。

A3:按照_1,_2,_3,_4,_5,_6分组&#xff0c;每组选择一条记录select&#64;1()是取序列中第一条符合条件的成员&#xff0c;如果第7个字段是work phone则取第八个字段的值作为work_phone字段&#xff0c;如果分组中第7个字段是work email则取第八个字段作为work_email字段。

python&#xff1a;

import time

import pandas as pd

import numpy as np

s &#61; time.time()

merge_dup &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\music_project_data\\merge_duplicate.csv&#39;,header&#61;None)

merge_dup_g &#61; merge_dup.groupby(by&#61;[0,1,2,3,4,5],as_index&#61;False)

work_arr &#61; np.zeros(len(merge_dup.columns))

work_list &#61; []

for index,group in merge_dup_g:

    work_arr &#61; group.iloc[0].values

    work_arr[6] &#61; work_arr[7]

    work_arr[7] &#61; group[group[6]&#61;&#61;&#39;work email&#39;].iloc[0].values[7]

    work_list.append(work_arr)

merge_dup &#61; pd.DataFrame(work_list,columns&#61;merge_dup.columns)

merge_dup.rename(columns&#61;{6:&#39;work_phone&#39;,7:&#39;work_email&#39;},inplace&#61;True)

print(merge_dup)

e &#61; time.time()

print(e-s)

按照前6个字段进行分组

因为题目要求我们把work phone 和work email拿出来作为字段&#xff0c;所以源数据的字段数没变&#xff0c;df.columns得到df的字段名&#xff0c;np.zeros()初始化一个数组。

循环分组

取分组中第6个字段等于work phone的第一行的值&#xff0c;赋值给初始化的数组

修改数组第7个元素(索引是6)为数组的第8个元素(索引是7)

取分组中第6个字段等于work email的第一行的值的第8个元素(索引是7)&#xff0c;赋值给数组的第8个元素(索引是7)。

将结果放入初始化的list中

转换成dataframe。

df.rename(columns,inplace)修改字段名&#xff0c;更新到源数据上。

结果&#xff1a;

esproc

python

 

耗时

esproc

0.002

python

0.022

 

6. 准备测试数据

esproc

 

A

1

&#61;now()

2

1000

3

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\M_name.txt").import&#64;t()

4

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\F_name.txt").import&#64;t()

5

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\S_name.txt").import&#64;t()

6

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\cities.txt").import&#64;t()

7

&#61;file("C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\states.txt").import&#64;t()

8

&#61;A3.derive("M":GENDER)

9

&#61;A4.derive("F":GENDER)

10

&#61;A8|A9

11

&#61;A6.derive(A7.select&#64;1(STATEID&#61;&#61;A6.STATEID).ABBR:ABBR)

12

&#61;A10.((A5.new(A10.NAME&#43;" "&#43;S_name:NAME,A10.GENDER:GENDER))).conj().sort(rand())

13

&#61;A2.new(#:ID,A12(#).NAME:NAME,A12(#).GENDER:GENDER,elapse((birthday&#61;date(year(now())-(18&#43;rand(38)),1,1)),rand(days&#64;y(birthday))):BIRTHDAY,(city&#61;A11(rand(A11.len())&#43;1)).NAME:CITY,city.ABBR:STATE)

14

&#61;interval&#64;ms(A1,now())

A2: 定义一个数字&#xff0c;用来确定创建多少员工信息&#xff0c;这里准备的数据比较少&#xff0c;感兴趣的同学可以多准备些&#xff0c;这里是男员工名字45&#xff0c;女员工名字47&#xff0c;姓47&#xff0c;所以最多可以创建(45&#43;47)*47&#61;4324条员工信息&#xff0c;因此这个数字不能大于4324。

A8:男员工名字新增一个字段GENDER,赋值M

A10:合并男女员工的姓名

A11:根据STATEID为city表增加state表中的ABBR字段并设置成city表的ABBR字段

A12:按照A10表合并姓名和姓。A.conj()将序列和列。得到(45&#43;47)*47个姓名和GENDER&#xff0c;sort(rand())将表随机排列&#xff0c;这是相对于news()的另一种写法&#xff0c;感兴趣的同学可以尝试改写成news()的写法。

A13:新建表&#xff0c;定义两个变量&#xff0c;birthday:18&#43;rand(18)&#xff0c;表示年龄在18至35周岁&#xff0c;用今年的年份减去年龄&#xff0c;得到出生的年份的一月一日。city&#xff1a;从city表中随机选取一条记录。定义变量是可以在计算的时候定义的&#xff0c;计算完成后赋值给变量&#xff0c;后续的计算可以直接使用这个变量&#xff0c;这使表达式显得简洁。最终的BIRTHDAY字段为从那年的1月1日&#xff0c;随机推迟那年的天数的时间&#xff0c;得到生日。city去city表的NAME字段&#xff0c;STATE去city表的ABBR字段。

python&#xff1a;

import time

import pandas as pd

import numpy as np

import datetime

import random

s &#61; time.time()

data_quantity &#61; 1000

m_name &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\M_name.txt&#39;,sep&#61;&#39;\t&#39;)

f_name &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\F_name.txt&#39;,sep&#61;&#39;\t&#39;)

s_name &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\S_name.txt&#39;,sep&#61;&#39;\t&#39;)

cities &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\cities.txt&#39;,sep&#61;&#39;\t&#39;)

states &#61; pd.read_csv(&#39;C:\\Users\\Sean\\Desktop\\kaggle_data\\prepare_data\\states.txt&#39;,sep&#61;&#39;\t&#39;)

m_name[&#39;GENDER&#39;] &#61; &#39;M&#39;

f_name[&#39;GENDER&#39;] &#61; &#39;F&#39;

name &#61; pd.concat([m_name,f_name])

name[&#39;FULL_NAME&#39;]&#61;1

s_name[&#39;FULL_NAME&#39;]&#61;1

name &#61; pd.merge(name,s_name,on&#61;&#39;FULL_NAME&#39;)

name[&#39;FULL_NAME&#39;]&#61;name[&#39;NAME&#39;]&#43;&#39; &#39;&#43;name[&#39;S_name&#39;]

city_state &#61; pd.merge(cities[[&#39;NAME&#39;,&#39;STATEID&#39;]],states[[&#39;ABBR&#39;,&#39;STATEID&#39;]],on&#61;&#39;STATEID&#39;)

birth_list &#61; []

city_list &#61; []

state_list &#61; []

for i in range(data_quantity):

    age &#61; random.randint(18,35)

    birth_y &#61; datetime.datetime.today().year-age

    birthday &#61; datetime.datetime(birth_y,1,1).date()

    year_days &#61; int(datetime.date(birth_y,12,31).strftime(&#39;%j&#39;))

    birthday &#61; birthday &#43; datetime.timedelta(days&#61;random.randint(0,year_days))

    birth_list.append(birthday)

    rand_index &#61; random.randint(0,len(city_state)-1)

    city_list.append(city_state[&#39;NAME&#39;].loc[rand_index])

    state_list.append(city_state[&#39;ABBR&#39;].loc[rand_index])

rand_arr &#61; np.random.randint(0,len(name),data_quantity)

person &#61; name[[&#39;FULL_NAME&#39;,&#39;GENDER&#39;]].loc[rand_arr]

person[&#39;ID&#39;]&#61;np.arange(data_quantity)

person[&#39;BIRTHDAY&#39;] &#61; birth_list

person[&#39;CITY&#39;] &#61; city_list

person[&#39;STATE&#39;] &#61; state_list

person &#61; person.rename(columns&#61;{&#39;FULL_NAME&#39;:&#39;NAME&#39;}).reset_index(drop&#61;True)

print(person[[&#39;ID&#39;,&#39;NAME&#39;,&#39;GENDER&#39;,&#39;BIRTHDAY&#39;,&#39;CITY&#39;,&#39;STATE&#39;]])

e &#61; time.time()

print(e-s)

新增字段&#xff0c;纵向和横向合并dataframe&#xff0c;我们在前边的例子已经多次用到了&#xff0c;这里不再赘述

简单解释一下姓名合并的问题&#xff0c;由于两个dataframe没有共同的字段作为key&#xff0c;所以我们造了一个字段FULL_NAME&#xff0c;赋值为1&#xff0c;只为进行merge。

定义三个list&#xff0c;分别用来生成BIRTHDAY,CITY,STATE列

把年龄定义在18-35之间&#xff0c;由年龄生成随机的生日&#xff0c;然后放入定义好的list中

CITY和STATE字段的值是利用loc[]函数&#xff0c;随机取&#xff0c;并放入定义好的list中

定义一个数组&#xff0c;随机生成name数据的索引

通过loc[rand_arr]函数&#xff0c;取随机的1000个&#xff0c;生成FULL_NAME和GENDER字段。

np.arange(n)生成n个元素的一维数组&#xff0c;作为ID字段。

然后把刚才的三个list赋值给BIRTHDAY,CITY,STATE。

rename()将FULL_NAME字段名改为NAME&#xff0c;重新设置索引并将原来的索引丢弃。

生成最终结果。

结果&#xff1a;

esproc

python

 

耗时

esproc

0.018

python

0.184

 

小结&#xff1a;本节我们继续计算一些网上常见的题目&#xff0c;由于pandas依赖于另一个第三方库numpy&#xff0c;而numpy的数组元素只能通过循环一步一步进行更新&#xff0c;esproc的循环函数如new()、select()等都可以动态更新字段值&#xff0c;使得代码简单。在第二例中&#xff0c;日期处理时&#xff0c;esproc可以很轻松的划分出不规则的月份&#xff0c;并根据不规则月份进行计算。而python划分不规则月份时需要额外依赖datetime库&#xff0c;还要自行根据月份天数划分&#xff0c;实在是有些麻烦。


推荐阅读
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 深入学习 Python 中的 xlrd 模块:掌握 Excel 文件读取技巧
    本文深入探讨了 Python 中的 xlrd 模块,重点介绍了如何高效读取 Excel 文件(包括 xlsx 和 xls 格式)。同时,文章还详细讲解了 xlwt 模块在 Excel 文件写操作中的应用。此外,文中列举了常见单元格数据类型及其处理方法,为读者提供了全面的实践指导。 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • Python – 遍历日期序列的高效方法与技巧 ... [详细]
  • 在将 MySQL 查询转换为 LINQ 时遇到了挑战,特别是在使用 Any 方法时。尽管已成功建立了连接并执行了查询,但返回的结果集中 lambda 表达式部分为空,导致无法正确映射数据。本文探讨了这一问题的根源,并提供了几种可能的解决方案,包括调整查询逻辑和优化 LINQ 表达式的建议。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 在该项目中,参与者需结合历史使用模式和天气数据,以预测华盛顿特区自行车共享系统的租赁需求。数据分析部分首先涉及数据的收集,包括用户骑行记录和气象信息,为后续模型构建提供基础。通过深入的数据预处理和特征工程,确保数据质量和模型准确性,最终实现对自行车租赁需求的有效预测。 ... [详细]
  • Python 数据分析领域不仅拥有高质量的开发环境,还提供了众多功能强大的第三方库。本文将介绍六个关键步骤,帮助读者掌握 Python 数据分析的核心技能,并深入探讨六款虽不广为人知但却极具潜力的数据处理库,如 Pandas 的替代品和新兴的可视化工具,助力数据科学家和分析师提升工作效率。 ... [详细]
  • 运用Isotonic回归算法解决鸢尾花数据集中的回归挑战
    本文探讨了利用Isotonic回归算法解决鸢尾花数据集中的回归问题。首先介绍了Isotonic回归的基本原理及其在保持单调性方面的优势,并通过具体示例说明其应用方法。随后详细描述了鸢尾花数据集的特征和获取途径,最后展示了如何将Isotonic回归应用于该数据集,以实现更准确的预测结果。 ... [详细]
  • 内网渗透技术详解:PTH、PTT与PTK在域控环境中的应用及猫盘内网穿透配置
    本文深入探讨了内网渗透技术,特别是PTH、PTT与PTK在域控环境中的应用,并详细介绍了猫盘内网穿透的配置方法。通过这些技术,安全研究人员可以更有效地进行内网渗透测试,解决常见的渗透测试难题。此外,文章还提供了实用的配置示例和操作步骤,帮助读者更好地理解和应用这些技术。 ... [详细]
  • MySQL 8.0 中的二进制日志格式详细解析及其官方文档参考。本文介绍了MySQL服务器如何使用不同的日志记录格式来记录二进制日志,包括早期版本中基于SQL语句的复制机制(即基于语句的日志记录)。此外,还探讨了其他日志记录方式,如基于行的日志记录和混合日志记录模式,并提供了配置和管理这些日志格式的最佳实践。 ... [详细]
author-avatar
温尧乔761975
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有