最近做的几个项目都要经常使用pandas操作excel,中间也遇到了不少坑,简单记录一下吧。套用骁哥的一句话,让自己变得更强!
Pandas中有几种常见的合并dataframe的方法,join,concat,merge,append。下面来尝试一下:
首先来做一些测试数据
data1 = {'Src': [1, 2, 3, 4], 'Mid': [1, 2, 3, 4] } data2 = {'Dst': [4, 5, 6], 'Mid': [1, 2, 3] } data3 = {'Dst': [4, 5, 6] } data4 = {'Dst1': [7, 8, 9] } df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) df3 = pd.DataFrame(data3) df4 = pd.DataFrame(data4)
1,join函数
join函数很简单,就是两个dataframe按index合并 (不可以有相同的列名,否则会报错)。使用方法:df1.join(df2)。默认是left关联
df1.join(df4,how='left') Src Mid Dst1 0 1 1 7.0 1 2 2 8.0 2 3 3 9.0 3 4 4 NaN df1.join(df4,how='right') Src Mid Dst1 0 1 1 7 1 2 2 8 2 3 3 9
2,concat函数
concat函数实际上是两个dataframe拼接在一起,跟index,列名都无关。使用方法pd.concat([df1,df2])。从下面的例子可以看到,即使df1,df2有相同的列mid,但是也不会通过列名合并,只是简单的将它们拼接到一起
pd.concat([df1,df2]) Src Mid Dst 0 1.0 1 NaN 1 2.0 2 NaN 2 3.0 3 NaN 3 4.0 4 NaN 0 NaN 1 4.0 1 NaN 2 5.0 2 NaN 3 6.0
pd.concat([df1,df3]) Src Mid Dst 0 1.0 1.0 NaN 1 2.0 2.0 NaN 2 3.0 3.0 NaN 3 4.0 4.0 NaN 0 NaN NaN 4.0 1 NaN NaN 5.0 2 NaN NaN 6.0
3,merge函数
merge函数要求两个dataframe有相同的列,merge函数有多种写法(如下)。如果有多个相同的列时,也可以通过关键字on来定义使用哪列作为连接字段:df1.merge(df2,how='left',on='Mid')
pd.merge(df1,df2) Src Mid Dst 0 1 1 4 1 2 2 5 2 3 3 6 df1.merge(df2) Src Mid Dst 0 1 1 4 1 2 2 5 2 3 3 6 df1.merge(df2,how='right') Src Mid Dst 0 1 1 4 1 2 2 5 2 3 3 6 df1.merge(df2,how='left') Src Mid Dst 0 1 1 4.0 1 2 2 5.0 2 3 3 6.0 3 4 4 NaN
4,append函数
append函数和join函数很像,join函数是横向使用index关联,append是使用column列名纵向关联。
df1.append(df2) Src Mid Dst 0 1.0 1 NaN 1 2.0 2 NaN 2 3.0 3 NaN 3 4.0 4 NaN 0 NaN 1 4.0 1 NaN 2 5.0 2 NaN 3 6.0 df1.append(df3) Src Mid Dst 0 1.0 1.0 NaN 1 2.0 2.0 NaN 2 3.0 3.0 NaN 3 4.0 4.0 NaN 0 NaN NaN 4.0 1 NaN NaN 5.0 2 NaN NaN 6.0
相信这几种dataframe合并方式,总有一款适合你
标签:Src,join,NaN,df1,Mid,Dataframe,df2,merge From: https://www.cnblogs.com/kykstyle/p/17846270.html