在平时的学习或工作中可能会涉及多张表的操作,例如:
- 将表结构先沟通(即变量个数和变量类型均仙童)的多张表纵向合并到一张长表中。
- 将多张表的变量水平扩展到一张宽表中。
如果对数据SQL语法比较熟悉,那表之间的合并和连接就非常简单了,对于多张表的合并,只需要使用UNION或NION ALL关键词,对于多张表之间的连接只需要使用INNER JOIN或LEFT JOIN即可。
需要注意的是
对于多表之间的纵向合并,必须确保夺标的列数和数据类型一致;
对于多表之间的水平扩展,则必须保证多表之间拥有共同的匹配变量。
对于Python来说,Pandas模块提供了对应的concat函数和merge函数来实现纵向合并和横向合并。
一、合并函数concat()
concat()函数的语法如下
pd.concat(objs,axis=0,join='outer',jokin_axes=None,ignore_index=False,keys=None)
函数的参数说明如下:
- objs:指定需要合并的对象,可以是序列、数据框或面板数据构成的列表。
- axis:指定数据合并的轴,默认为0,表示合并多个数据的行(行数发生了变化),如果为1,则表示合并多个数据的列(列数发生了变化)。
- join:指定合并的方式,默认为outer,表示合并所有数据,如果改为inner,则表示合并公共部分的数据。
- join_axes:合并数据后,指定保留的数据轴。
- ignore_index:bool类型的参数,表示是否忽略原数据集的索引,默认为False,如果设置为True,则表示忽略原索引并生成新索引。
- keys:为合并后的数据添加新索引,用于区分各个数据部分。
对于合并函数concat()有两点需要强调:
- 如果纵向合并多个数据集,即使这些数据集都含有“姓名”变量,但变量名称不一致,如Name和name,通过合并后将会得到错误的结果。
- join_axes参数的使用,例如该参数等于[df.index],则表示保留与df行标签值一样的数据,但需要配合axis=1一起使用(即实现的是变量横向合并操作);如果等于[df.columns],则保留df中所有变量值一样的数据,但不需要添加axis=1的约束。
concat()函数的使用方法如下:
import pandas as pd
# 构造数据集df1和df2
df1= pd.DataFrame({
'name':['lily','lucy','tom'],
'age':[21,25,22],
'gengder':['female','female','male']})
df2 = pd.DataFrame({
'name':['david','慕容复']<