社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

左手用R右手Python系列(II): 数据合并与追加

EasyCharts • 7 年前 • 761 次点击  

今天这篇跟大家介绍R语言与Python数据处理中的第二个小知识点——数据合并与追加。


针对数据合并与追加,R与Python中都有对应的函数可以快速完成需求,根据合并与追加的使用场景,这里我将本文内容分成三部分:


  • 数据合并(简单合并,无需匹配)

  • 数据合并(匹配合并)

  • 数据追加


数据合并(简单合并,无需匹配)


针对简单合并而言,在R语言中主要通过以下两个函数来实现:


  • cbind()

  • dplyr::bind_cols()


df1

                     B= c('B0', 'B1', 'B2', 'B3'),

                     C= c('C0', 'C1', 'C2', 'C3'),

                     D=c('D0', 'D1', 'D2', 'D3')

                    )

df2

                    F= c('B4', 'B5', 'B6', 'B7'),

                    G=c('C4', 'C5', 'C6', 'C7'),

                     H= c('D4', 'D5', 'D6', 'D7'))

df3

                     J= c('B8', 'B9', 'B10', 'B11'),

                    K=c('C8', 'C9', 'C10', 'C11'),

                    L=c('D8', 'D9', 'D10', 'D11')

                   )

df1;df2;df3


mydata1

mydata2



在Python中,简单的合并可以通过Pandas中的concat函数来实现的。

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],

                     'B': ['B0', 'B1', 'B2', 'B3'],

                     'C': ['C0', 'C1', 'C2', 'C3'],

                     'D': ['D0', 'D1', 'D2', 'D3']},

                     index=[0, 1, 2, 3])

df2 = pd.DataFrame({'E': ['A4', 'A5', 'A6', 'A7'],

                    'F': ['B4', 'B5', 'B6', 'B7'],

                    'G': ['C4', 'C5', 'C6', 'C7'],

                     'H': ['D4', 'D5', 'D6', 'D7']},

                      index=[0, 1, 2, 3])

df3 = pd.DataFrame({'I': ['A8', 'A9', 'A10', 'A11'],

                     'J': ['B8', 'B9', 'B10', 'B11'],

                    'K': ['C8', 'C9', 'C10', 'C11'],

                    'L': ['D8', 'D9', 'D10', 'D11']},

                    index=[0, 1, 2, 3])


result1 = pd.concat([df1,df2,df3],axis=1,join_axes=[df1.index])



横向合并:(需匹配)


在R语言中,这种操作有很多可选方案,如基础函数merge、plyr包中的join函数以及dplyr包中的left/right/inter/full_join等函数。


  • merge

  • plyr::join

  • dplyr::left/right/inter/full_join


这里为了节省时间,只介绍第一种基础函数,欲了解详情,可以查看这篇历史文章:

R语言数据处理——数据合并与追加


merge(x, y,  #带合并的数据集名称(左右顺序)

  by = intersect(names(x), names(y)), #合并依据字段(名称相同)

  by.x = by,  #名称不同时需同时时声明

  by.y = by,  #名称不同时需同时时声明

  all = FALSE,#合并类型,TRUE为全连接 (full),FALSE为内连接 (inter)

  all.x = all,#左连接

  all.y = all,#右连接

  )


df3

gender=c('male','female','male','female','male','female','male','female'),

pay=c('Y','N','Y','Y','N','Y','N','Y'),

m_point=c(10,12,20,40,40,40,30,20))

df4

city=c('Beijing ', 'Shenzhen','Guangzhou', 'Shenzhen', 'Shanghai','Beijing'),

age=c(23,44,54,32,34,32),

category=c('100-A','100-B','110-A','110-C','210-A','130-F'),

price=c(1200,2900,2133,5433,1346,4432))

print(df3);print(df4)




mydata3

mydata3

mydata3

mydata3



在Python中,这一操作也可以通过函数Pandas库中的cancat函数或者merge函数来完成。

Pandas-merge

df3=pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006,1007,1008],

"gender":['male','female','male','female','male',

'female','male','female'],

"pay":['Y','N','Y','Y','N','Y','N','Y'],

"m-point":[10,12,20,40,40,40,30,20]})

df4= pd.DataFrame({"id":[1001,1002,1003,1004,1005,1006],

"date":pd.date_range('20130102',periods=6),

"city":['Beijing', 'Shenzhen','Guangzhou','Shenzhen','Shanghai','Beijing'],

"age":[23,44,54,32,34,32],

"category":['100-A','100-B','110-A','110-C','210-A','130-F'],

"price":[1200,np.nan,2133,5433,np.nan,4432]},

columns =['id','date','city','category','age','price'])

print(df3);print(df4)



df_inner=pd.merge(df3,df4,how='inner');print(df_inner) #数据表合并(内连接:inter join)

df_left=pd.merge(df3,df4, how='left') ;print(df_left)  #数据表合并(左连接:left join)

df_right=pd.merge(df3,df4,how='right');print(df_right) #数据表合并(右连接:right join)

df_outer=pd.merge(df3,df4,how='outer');print(df_outer) #数据表合并(全连接:full join)



数据追加:


数据追加通常只需保证数据及的宽度一致且列字段名称一致,相对来说比较简单。在R语言和Python中,也很好实现。


在R语言中,可视化朱数据追加的函数有:


  • rbind()

  • dplyr::bind_rows()


mydata3

mydata4



python中则可以很容易的通过数据框本身的append函数来实现简单的数据追加:


df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],

                     'B': ['B0', 'B1', 'B2', 'B3'],

                     'C': ['C0', 'C1', 'C2', 'C3'],

                     'D': ['D0', 'D1', 'D2', 'D3']},

                     index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],

                    'B': ['B4', 'B5', 'B6', 'B7'],

                    'C': ['C4', 'C5', 'C6', 'C7'],

                     'D': ['D4', 'D5', 'D6', 'D7']},

                      index=[4,5,6,7])

df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],

                     'B': ['B8', 'B9', 'B10', 'B11'],

                    'C': ['C8', 'C9', 'C10', 'C11'],

                    'D': ['D8', 'D9', 'D10', 'D11']},

                    index=[8, 9,10,11])


result = df1.append(df2);print(result)

result = result.append(df3);print(result)



如果是使用canat函数也可以非常轻松的完成数据追加:


result = pd.concat([df1, df2, df3]);print(result)



本文汇总:


数据合并(简单合并)

R:

cbind()

dplyr::bind_cols()


Python:

Pandas-cancat()


数据合并(匹配和并)

R:

merge

plyr::join()

dplyr::left/right/inter/full_join()


Python:

Pandas-merge


数据追加:

R:

rbind()

dplyr::bind_rows()


Python:

Pandas-append()

Pandas-cancat()


以上仅是个人常用的几种,方法肯定不至于此,欢迎大家补充!


如需转载请联系EasyCharts团队!

微信后台回复“转载”即可!



【书籍推荐】《Excel 数据之美--科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/xCLeQI3mhN
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3091
 
761 次点击