200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > pandas的自带数据集_Python Data Science 系列:数据处理

pandas的自带数据集_Python Data Science 系列:数据处理

时间:2024-01-08 13:25:15

相关推荐

pandas的自带数据集_Python Data Science 系列:数据处理

0 前言

前面介绍使用Python中dfply库中的函数进行数据处理,这一部分对比一下dfply库与pandas库中函数,可以结合自己的喜好,选择不同的实现方式。

1 数据集

这里仍使用diamonds数据集,数据集共53940行,有carat、cut、color、clarity、depth、table、price、x、y、z共10列,对应每个钻石的一些参数值。

from

说明:下面“使用dfply库中函数”代码不再运行,运行结果可以查看之前文章(若想执行,添加from dfply import *),这里只加载dfply包中的diamonds数据集,目的介绍使用其他第三方库完成相同的操作。

2 函数对比

2.1 选择列

dfply库中使用select()函数;

pandas库中使用[]、loc[]、iloc[]函数;

选择cut、price、x列

##使用dfply库中函数##diamonds >> select(X.cut, 'price', X.x) >> head(3)##使用pandas库中函数diamonds[['cut', 'price', 'x']].head(3)##或者diamonds.loc[:,['cut','price','x']].head(3)##或者diamonds.iloc[:,[1,6,7]].head(3)

2.2 选择行

dfply库中使用row_slice()函数;

pandas库中使用iloc[]函数;

选择数据集中第11行和第16行数据

##使用dfply库中函数##diamonds >> row_slice([10,15])##使用pandas库中函数diamonds.iloc[[10,15],:]

2.3 抽样

dfply库中使用sample()函数;

pandas库中使用sample()函数;

随机抽取数据集0.0001比例数据,放回抽样:

##使用dfply库中函数##diamonds >> sample(frac = 0.0001, replace = True)##使用pandas库中函数diamonds.sample(frac = .0001)

随机抽取5条记录,不放回抽样:

##使用dfply库中函数##diamonds >> sample(n = 5, replace = False)##使用pandas库中函数diamonds.sample(n = 5, replace = False)

2.4 唯一值

dfply库中使用distinct()函数;

pandas库中使用unique()、drop_duplicates()函数;

cut列类别:

##使用dfply库中函数##diamonds >> select(X.cut) >> distinct()##使用pandas库中函数diamonds['cut'].unique()##或者diamonds['cut'].drop_duplicates()

2.5 过滤

dfply库中使用filter_by()或者mask()函数;

pandas库中使用query()函数;

筛选cut为Ideal且price小于337的记录

##使用dfply库中函数##diamonds >> filter_by(X.cut == 'Ideal', X.price < 337)##使用pandas库中函数diamonds.query("cut == 'Ideal' & price < 337")

2.6 新增列

dfply库中使用mutate()函数;

pandas库中使用assign()函数;

新增x_plus_y=x+y, xyz=x*y*z列

###使用dfply库中函数###diamonds >> mutate(x_plus_y = X.x + X.y, xyz = X.x*X.y*X.z) >> head(3)##使用pandas库中函数diamonds.assign(x_plus_y = diamonds.x + diamonds.y, xyz = diamonds.x*diamonds.y*diamonds.z).head(3)

2.7 拼接

dfply库中使用bind_rows()、bind_cols()函数;

pandas库中使用concat(,axis = 0)、concat(,axis = 1)函数;

行拼接

diamonds2 = diamonds.head(2)diamonds3 = diamonds.tail(3)###使用dfply库中函数###diamonds2 >> bind_rows(diamonds3)###使用pandas库中函数pd.concat([diamonds2,diamonds3],axis=0)

列拼接

diamonds4 = diamonds[['cut', 'carat','z']]diamonds5 = diamonds[['x', 'y']]###使用dfply库中函数###diamonds4 >> bind_cols(diamonds5) >> head(5)###使用pandas库中函数pd.concat([diamonds4,diamonds5],axis=1).head(5)

2.8 连接

dfply库中使用xxx_join()函数;

pandas库中使用merge()函数;

内连接

a = pd.DataFrame({'x1':['A','B','C'],'x2':[1,2,3]})b = pd.DataFrame({'x1':['A','B','D'],'x3':[True,False,True]})###使用dfply库中函数###a >> inner_join(b, by='x1')##使用pandas库中函数pd.merge(a,b, how='inner', on = 'x1')###或者pd.merge(a,b, how='inner', left_on= 'x1', right_on = 'x1')

说明一下,使用merge()函数进行连接的时候,当两个df的主键名相同,可以使用参数on = '主键'; 当两个df的主键名不同的时候,参数使用left_on = 'df1的主键名', right_no = 'df2的主键名' 。

左联结

##使用dfply库中函数###a >> left_join(b, by='x1')###使用pandas库中函数pd.merge(a,b, how='left')###或者pd.merge(a,b, how='left', left_on='x1', right_on='x1')

右连接

###使用dfply库中函数##a >> right_join(b, by='x1')###使用pandas库中函数pd.merge(a,b, how='right')###或者pd.merge(a,b, how='right',left_on='x1', right_on='x1')

2.9 排序

dfply库中使用arrange()函数;

pandas库中使用sort_values()函数;

按照price价格升序排列数据集

###使用dfply库中函数###diamonds >> arrange(X.price, ascending = True) >> head(4)###使用pandas库中函数diamonds.sort_values('price', ascending=True).head(4)

2.10 重命名

dfply库中使用rename()函数;

pandas库中使用 rename()函数;

将cut列名重命名为CUT

##使用dfply库中函数##diamonds >> rename(CUT = X.cut) >> head(5)###使用pandas库中函数diamonds.rename(columns={'cut' : 'CUT'}).head(5)

2.11 窗口函数

排名窗口函数

dfply库中使用row_number()、min_rank()、dense_rank()函数pandas库中使用rank(method = 'first', )、rank(method = 'min', )、rank(method = 'dense', )

偏移窗口函数:dfply库中使用lead(,n)和lag(,n)函数

pandas库中使用shift(n*-1)和shift(n)函数

累计聚合函数:dfply库中使用cumsum()、cummean()、cummax()、cummin()和cumprod()函数等

pandas中使用cumsum()、expanding().mean()、expanding().max()、

expanding().min()和cumprod()函数等

row_number()函数

##使用dfply库中函数:row_number()###diamonds >> select(X.price) >> mutate(price_rn = row_number(X.price)) >> head(6)###使用pandas库中函数diamonds.assign(price_rn = diamonds.price.rank(method='first', ascending=True)).loc[:,['price', 'price_rn']].head(6)

min_rank()函数

####新增一列排序,min_rank,使用dfply库中函数###diamonds >> select(X.price) >> mutate(price_mrank = min_rank(X.price)) >> head(6)##使用pandas库中函数(diamonds.assign(price_mrank = diamonds.price.rank(method='min', ascending=True)).loc[:,['price', 'price_mrank']].head(6))

dense_rank()函数

###新增一列排序,dense_rank,使用dfply库中函数###diamonds >> select(X.price) >> mutate(price_drank = dense_rank(X.price)) >> head(6)###使用pandas库中函数(diamonds.assign(price_drank = diamonds.price.rank(method='dense', ascending=True)).loc[:,['price', 'price_drank']].head(6))

lead()、lag()函数

##使用dfply库中函数###(diamonds >> arrange(X.price) >> select(X.price) >>mutate(price_lead1 = lead(X.price,1), price_lead2 = lead(X.price,2),price_lag1 = lag(X.price,1), price_lag2 = lag(X.price,2)) >>head(5))##使用pandas库中函数(diamonds.sort_values('price').assign(price_lead1 = diamonds.price.shift(1*-1),price_lead2 = diamonds.price.shift(2*-1),price_lag1 = diamonds.price.shift(1),price_lag2 = diamonds.price.shift(2)).loc[:,['price', 'price_lead1', 'price_lead2', 'price_lag1', 'price_lag2']].head(5))

累计聚合函数

###使用dfply库中函数(diamonds >> select(X.price) >> head(6) >>mutate(price_cumsum = cumsum(X.price), price_cummean = cummean(X.price),price_cummax = cummax(X.price), price_cummin = cummin(X.price),price_cumprod = cumprod(X.price)))###使用pandas库中函数(diamonds.assign(price_cumsum = diamonds.price.cumsum(),price_cummean = diamonds.price.expanding().mean(),price_cummax = diamonds.price.expanding().max(),price_cummin = diamonds.price.expanding().min(),price_cumprod = diamonds.price.cumprod()).loc[:,['price', 'price_cumsum', 'price_cummean', 'price_cummax', 'price_cummin', 'price_cumprod']].head(5))

2.12 聚合函数

dfply库中使用first()、last()、nth()、n()、n_dictinct()等

pandas库中使用 series.iloc[0]、series.iloc[series.size-1]、series.iloc[n] 、 series.size、series.unique().size等;

###使用dfply库中函数###(diamonds >> head(6) >> select(X.price) >> summarise(price_first = first(X.price), price_last = last(X.price),price_nthprice = nth(X.price,3), price_n = n(X.price), price_disn = n_distinct(X.price)))##使用pandas库中函数diamonds.price.iloc[0]diamonds.price.iloc[diamonds.price.size-1]diamonds.price.iloc[3]diamonds.price.sizediamonds.price.unique().size

3 总结

比较了Python中的dfply库和pandas库中的函数,结合自己的背景,我统计出身,日常分析中更喜欢使用dfply库中的函数。

关于作者:某互金公司从事风控方面工作,数据科学爱好者,微信公众号WorkingNotes,致力于记录自己成长轨迹,分享实践经验,欢迎交流。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。