Python数据分析,办公自动化,数据表如何做拼接与连接?
日常数据分析中,需要将多个表进行合并,包括表的纵向拼接以及表的横向连接,将多个小表组合成为一张大表,使用的方法有Excel中的Vlookup函数法,SQL中UNION和JOIN的方法,以及Pandas模块中的函数。
使用VLOOKUP函数,指定条件在指定区域直方向查找数据。
VLOOKUP函数的公式如下:VLOOKUP(lookupvalue,tablearray,colindexnum,rangelookup)
匹配张三的语文、数学、英语成绩使用VLOOKUP函数演示。
VLOOKUP函数动态演示
在SQL中,对于多张表的纵向拼接,使用UNION或UNIONALL关键词,对于多张表横向连接,使用INNERJOIN或者LEFTJOIN即可。
在Python,Pandas模块中append函数和concat函数可以对表格做纵向合并,merge函数可以对表格横向连接。其中,append函数只能在行方向进行拼接,concat函数可以在行方向或列方向进行内联或外联拼接操作,默认行拼接,取并集,merge函数可以在行方向或列方向进行拼接,默认列拼接,取交集。
本文详细介绍Pandas模块中append函数、concat函数和merge函数,使用案例数据进行代码演示,下面一起来学习。
本文来源于公众号:大话数据分析。一、表格纵向拼接
1、append函数
append函数的语法如下:df。append(other,ignoreindexFalse,verifyintegrityFalse,sortNone)
函数的参数说明如下:other:DataFrame、series、dict、list等数据结构;ignoreindex:默认值为False,若为True则不使用index标签;verifyintegrity:默认值为False,若为True,当创建相同的index时会抛出ValueError的异常;sort:默认None,若为True时,进行排序。
append函数的使用方法如下:
构建一个DataFrame数据集,表示为df1和df2。df1pd。DataFrame(〔〔11,12〕,〔13,14〕〕,columns〔二班,一班〕,index〔优,良〕)df1
df2pd。DataFrame(〔〔15,16〕〕,columns〔二班,三班〕,index〔差〕)df2
使用append函数拼接,不排序。df1。append(df2,sortFalse)
sortTrue,进行排序。df1。append(df2,sortTrue)
ignoreindexTrue去除索引。df1。append(df1,ignoreindexTrue)去除索引
2、concat函数
concat函数的语法如下:pd。concat(objs,axis0,joinouter,jokinaxesNone,ignoreindexFalse,keysNone)
函数的参数说明如下:objs:指定需要合并的对象;axis:拼接轴方向,默认为0,沿行拼接;若为1,沿列拼接;join:默认外联,拼接另一轴所有的label,缺失值用NaN填充;joinaxes:指定需要拼接轴的labels,可在join既不内联又不外联的时候使用;ignoreindex:对index进行重新排序,默认为False,若为True,则表示忽略原索引并生成新索引;keys:多重索引,便于区分来源表;sort:按值排序。
concat函数的使用方法如下:importpandasaspdimportdatetime
构建一个DataFrame数据集,表示为df1和df2。构造数据集df1df1pd。DataFrame({用户ID:〔1001,1002,1003,1004,1005,1006〕,日期:pd。daterange(datetime。datetime(2021,3,26),periods6),城市:〔北京,上海,广州,上海,杭州,北京〕,年龄:〔23,44,54,32,34,32〕,性别:〔F,M,M,F,F,F〕,成交量:〔3200,1356,2133,6733,2980,3452〕},columns〔用户ID,日期,城市,年龄,性别,成交量〕)df1
构造数据集df2df2pd。DataFrame({用户ID:〔1007,1008,1009〕,日期:pd。daterange(datetime。datetime(2021,3,1),periods3),城市:〔北京,上海,广州〕,年龄:〔33,34,34,〕,成交量:〔4200,3356,2633〕},columns〔用户ID,日期,城市,年龄,成交量〕)df2
使用concat函数拼接,keys为合并后的数据添加新索引,用于区分各个数据部分sort按照列名排序。数据集的纵向合并dfpd。concat(〔df1,df2〕,指定需要合并的对象keys〔df1,df2〕,为合并后的数据添加新索引,用于区分各个数据部分sortTrue按照列名排序)df
level0将第一列的索引列转换为变量。将第一列的索引列转换为变量df3df。resetindex(level0,inplaceFalse)df3
rename将第一列的索引列转换为变量后然后重命名。变量重命名df3。rename(columns{level0:数据集},inplaceTrue)df3
拼接成新的数据集后,发现行索引还是原来的,不直观,这是使用两种方法进行修改,一种是使用index的方法。重新调整行索引df3。indexrange(df3。shape〔0〕)df3
另一种当ignoreindexTrue,对index进行重新排序。重新调整行索引dfpd。concat(〔df1,df2〕,sortTrue,ignoreindexTrue)df
二、横向连接
1、merge函数
merge函数的语法如下:pd。merge(left,right,howinner,onNone,leftonNone,rightonNone,leftindexFalse,rightindexFalse,sortFalse,suffixes(x,y),copyTrue,indicatorFalse,validateNone)
函数的参数说明如下:leftdata、rightdata:需要合并的两部分数据;on:连接键,当两个表的连接键名一样,可以直接用on,而不用lefton和righton,可以是单键或多键;lefton、righton:如果两个表键名不一样,则分别指出,可以是单键或多键;suffixes:如果两边键名相同,要做区分,可以使用此参数指定区分格式,如suffixes(leftx,righty);how:指定连接方式,分为inner、left、right、outer;
merge函数的使用方法如下:importpandasaspdimportdatetime
构建一个DataFrame数据集,表示为df1和df2。构造数据集dfdf1pd。DataFrame({用户ID:〔1001,1002,1003,1004,1005,1006〕,日期:pd。daterange(datetime。datetime(2021,3,26),periods6),城市:〔北京,上海,广州,上海,杭州,北京〕,年龄:〔23,44,54,32,34,32〕,性别:〔F,M,M,F,F,F〕,成交量:〔3200,1356,2133,6733,2980,3452〕},columns〔用户ID,日期,城市,年龄,性别,成交量〕)df1
构造构造列名不同的df2df2pd。DataFrame({id:〔1001,1002,1003,1004,1005,1006,1007,1008,1009,1010〕,平台:〔京东,淘宝,京东,天猫,唯品会,苏宁,天猫,淘宝,美团,拼多多〕,收入额:〔100000,320000,240000,445000,340000,640000,300000,460000,540000,230000〕},columns〔id,平台,收入额〕)df2
首先构建了两个连接键列名不同的数据集,需要分别指定lefton和righton进行连接,此处howleft是左连接。将df1和df2连接起来merge1pd。merge(leftdf1,rightdf2,howleft,lefton用户ID,rightonid)merge1
构造列名相同的df2,都有一个用户ID的列名。构造列名相同的df2df2pd。DataFrame({用户ID:〔1001,1002,1003,1004,1005,1006,1007,1008,1009,1010〕,平台:〔京东,淘宝,京东,天猫,唯品会,苏宁,天猫,淘宝,美团,拼多多〕,收入额:〔100000,320000,240000,445000,340000,640000,300000,460000,540000,230000〕,日期:pd。daterange(datetime。datetime(2021,3,1),periods10)},columns〔用户ID,平台,收入额,日期〕)df2
因为都有一个用户ID的列名,所以此处左连接时,不用分别指定左右键名,只需要用on指定就好。指定用户ID连接merge2pd。merge(leftdf1,rightdf2,howleft,on用户ID)merge2
suffixes对于重复的列名修改,作区分。重复列名处理merge2pd。merge(leftdf1,rightdf2,howleft,on用户ID,suffixes〔,1〕)merge2
通常表格拼接完成后,数据预处理后就可以对数据做分析了,对于数据分析所需要的的字段分析。dfmerge2〔〔用户ID,日期,城市,成交量,收入额〕〕df
查看字段的属性。df。info()
做收入额的条形图。df〔收入额〕。plot(kindbar)