Pandas数据表拼接 | 更文挑战

212 阅读3分钟

“这是我参与更文挑战的第6天,活动详情查看: 更文挑战

pandas库提供了一些高级功能,其中的数据合并与重塑为两个数据表的拼接提供了极大的便利,主要涉及merge()、concat()、append()等函数,下面通过一个例子进行简单介绍。假设创建了如下两个DataFrame数据表,需要将它们合并。

import pandas as pd
df1 = pd.DataFrame({'company':['Wank','Ali','Baidu'],'score':[90,95,85]})
df2 = pd.DataFrame({'company':['Wank','Ali','Baidu'],'price':[20,180,30]})

1.merge()函数

merge()函数可以根据一个或多个键(列)将不同数据表中的行连接起来,演示代码如下。

df3 = pd.merge(df1,df2)

运行后df3的内容见下表。

![image.png](p3-juejin.byteimg.com/tos-cn-i-

df3 = pd.merge(df1,df2,on='公司')

默认的合并其实是取交集(inner连接),即选取两个表共有的内容。如果想取并集(outer连接),即选取两个表所有的内容,可以设置how参数,代码如下。

df3 = pd.merge(df1,df2,how = 'outer')

运行后df3的内容见下表,可看到所有数据都在,原来没有的内容则为空值(NaN)。

image.png

如果想保留左表(df1)的全部内容,而对右表(df2)不太在意,可以将how参数设置为k3u1fbpfcp/21332d354e8a4567a72ee170e309c478~tplv-k3u1fbpfcp-watermark.image)

可以看到,merge()函数直接根据相同的列名(“公司”列)对两个表进行了合并,而且默认选取的是两个表共有的列内容(万科、阿里)。如果相同的列名不止一个,可以通过on参数指定按照哪一列进行合并,代码如下。 left,代码如下。

df3 = pd.merge(df1,df2,how='left')

补充知识点:根据行索引合并的join()函数

join()函数也是一种数据表拼接的常用函数,它可以根据行索引进行数据表合并,需要注意的是,使用join()函数进行数据表拼接时,若两个表中存在同名列,则需要设置lsuffix参数(左表同名列的后缀,suffix是“后缀”的意思,l表示left)和rsuffix参数(右表同名列的后缀,r表示right);若没有同名列,则可以直接写成df1.join(df2),这种写法与使用merge()函数相比更为简洁。

2.concat()函数

concat()函数是一种全连接(UNION ALL)方式,它不需要对齐,而是直接进行合并,即不需要两个表的某些列或索引相同,只是把数据整合到一起。因此,该函数没有how和on参数,而是通过axis参数指定连接的轴向,该参数默认为0,按行方向连接,即纵向拼接。

df3 = pd.concat([df1,df2],axis=0)

此时df3的内容见下表。

image.png

df3的行索引为原来两个表各自的索引,若要重置索引,可以在concat()函数中设置ignore_index=True,忽略原有索引,生成新的数字序列作为索引。若要按列方向连接,即横向拼接,可以设置axis参数为1.

3.append()函数

append()函数可以看成concat()函数的简化版,效果和pd.concat([df1,df2])类似;append()函数还有个常用的功能,和“列表.append()”一样,可用来新增元素.