Python数据分析,办公自动化,数据表如何做拼接与连接?
日常数据分析中,需要将多个表进行合并,包括表的纵向拼接以及表的横向连接,将多个小表组合成为一张大表,使用的方法有Excel中的 Vlookup 函数法,SQL中 UNION 和 JOIN 的方法,以及 Pandas 模块中的函数。
使用VLOOKUP函数,指定条件在指定区域直方向查找数据。
VLOOKUP函数的公式如下: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
匹配张三的语文、数学、英语成绩使用VLOOKUP函数演示。
VLOOKUP函数动态演示
在SQL中,对于多张表的纵向拼接,使用 UNION 或 UNION ALL 关键词,对于多张表横向连接,使用 INNER JOIN 或者 LEFT JOIN 即可。
在Python,Pandas模块中 append 函数和 concat 函数可以对表格做 纵向合并 , merge 函数可以对表格 横向连接 。其中,append函数只能在行方向进行拼接,concat函数可以在行方向或列方向进行内联或外联拼接操作,默认行拼接,取并集,merge函数可以在行方向或列方向进行拼接,默认列拼接,取交集。
本文详细介绍Pandas模块中append函数、concat函数和merge函数,使用案例数据进行代码演示,下面一起来学习。
本文来源于公众号:大话数据分析。一、表格纵向拼接
1、append函数
append函数的语法如下: df.append(other, ignore_index=False, verify_integrity=False, sort=None)
函数的参数说明如下: other:DataFrame、series、dict、list等数据结构; ignore_index:默认值为False,若为True则不使用index标签; verify_integrity :默认值为False,若为True,当创建相同的index时会抛出ValueError的异常; sort:默认None,若为True时,进行排序。
append函数的使用方法如下:
构建一个DataFrame数据集,表示为df1和df2。 df1=pd.DataFrame([[11,12],[13,14]],columns=["二班","一班"],index=["优","良"]) df1
df2=pd.DataFrame([[15,16]],columns=["二班","三班"],index=["差"]) df2
使用append函数拼接,不排序。 df1.append(df2,sort=False)
sort=True,进行排序。 df1.append(df2,sort=True)
ignore_index=True去除索引。 df1.append(df1,ignore_index=True)#去除索引
2、concat函数
concat函数的语法如下: pd.concat(objs,axis=0,join="outer",jokin_axes=None,ignore_index=False,keys=None)
函数的参数说明如下: objs:指定需要合并的对象; axis:拼接轴方向,默认为0,沿行拼接;若为1,沿列拼接; join:默认外联,拼接另一轴所有的label,缺失值用NaN填充; join_axes:指定需要拼接轴的labels,可在join既不内联又不外联的时候使用; ignore_index:对index进行重新排序,默认为False,若为True,则表示忽略原索引并生成新索引; keys:多重索引,便于区分来源表; sort: 按值排序。
concat函数的使用方法如下: import pandas as pd import datetime
构建一个DataFrame数据集,表示为df1和df2。 #构造数据集df1 df1 = pd.DataFrame({"用户ID":[1001,1002,1003,1004,1005,1006], "日期":pd.date_range(datetime.datetime(2021,3,26),periods=6), "城市":["北京", "上海", "广州", "上海", "杭州", "北京"], "年龄":[23,44,54,32,34,32], "性别":["F","M","M","F","F","F"], "成交量":[3200,1356,2133,6733,2980,3452]}, columns =["用户ID","日期","城市","年龄","性别","成交量"]) df1
#构造数据集df2 df2 = pd.DataFrame({"用户ID":[1007,1008,1009], "日期":pd.date_range(datetime.datetime(2021,3,1),periods=3), "城市":["北京", "上海", "广州"], "年龄":[33,34,34,], "成交量":[4200,3356,2633]}, columns =["用户ID","日期","城市","年龄","成交量"]) df2
使用concat函数拼接,keys为合并后的数据添加新索引,用于区分各个数据部分sort按照列名排序。 # 数据集的纵向合并 df = pd.concat([df1,df2],# 指定需要合并的对象 keys=["df1","df2"],# 为合并后的数据添加新索引,用于区分各个数据部分 sort=True #按照列名排序 ) df
level=0将第一列的索引列转换为变量。 # 将第一列的索引列转换为变量 df3 = df.reset_index(level=0,inplace=False) df3
rename将第一列的索引列转换为变量后然后重命名。 # 变量重命名 df3.rename(columns={"level_0":"数据集"},inplace=True) df3
拼接成新的数据集后,发现行索引还是原来的,不直观,这是使用两种方法进行修改,一种是使用index的方法。 # 重新调整行索引 df3.index = range(df3.shape[0]) df3
另一种当ignore_index=True,对index进行重新排序。 # 重新调整行索引 df = pd.concat([df1,df2],sort=True,ignore_index=True) df
二、横向连接
1、merge函数
merge函数的语法如下: pd.merge(left, right, how="inner", on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=("_x", "_y"), copy=True, indicator=False, validate=None)
函数的参数说明如下: left_data、right_data:需要合并的两部分数据; on:连接键,当两个表的连接键名一样,可以直接用on,而不用left_on和right_on,可以是单键或多键; left_on、right_on:如果两个表键名不一样,则分别指出,可以是单键或多键; suffixes:如果两边键名相同,要做区分,可以使用此参数指定区分格式,如suffixes=("left_x","right_y"); how:指定连接方式,分为inner、left、right、outer;
merge函数的使用方法如下: import pandas as pd import datetime
构建一个DataFrame数据集,表示为df1和df2。 #构造数据集df df1 = pd.DataFrame({"用户ID":[1001,1002,1003,1004,1005,1006], "日期":pd.date_range(datetime.datetime(2021,3,26),periods=6), "城市":["北京", "上海", "广州", "上海", "杭州", "北京"], "年龄":[23,44,54,32,34,32], "性别":["F","M","M","F","F","F"], "成交量":[3200,1356,2133,6733,2980,3452]}, columns =["用户ID","日期","城市","年龄","性别","成交量"]) df1
#构造构造列名不同的df2 df2 = pd.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
首先构建了两个连接键列名不同的数据集,需要分别指定left_on和right_on进行连接,此处how="left"是左连接。 # 将df1和df2连接起来 merge1 = pd.merge(left=df1,right=df2,how="left",left_on="用户ID",right_on="id") merge1
构造列名相同的df2,都有一个"用户ID"的列名。 #构造列名相同的df2 df2 = pd.DataFrame({"用户ID":[1001,1002,1003,1004,1005,1006,1007,1008,1009,1010], "平台":["京东","淘宝","京东","天猫","唯品会","苏宁","天猫","淘宝","美团","拼多多"], "收入额":[100000,320000,240000,445000,340000,640000,300000,460000,540000,230000], "日期":pd.date_range(datetime.datetime(2021,3,1),periods=10)}, columns =["用户ID","平台","收入额","日期"]) df2
因为都有一个"用户ID"的列名,所以此处左连接时,不用分别指定左右键名,只需要用on指定就好。 # 指定用户ID连接 merge2 = pd.merge(left=df1,right=df2,how="left",on="用户ID") merge2
suffixes对于重复的列名修改,作区分。 # 重复列名处理 merge2 = pd.merge(left=df1,right=df2,how="left",on="用户ID",suffixes=["","1"]) merge2
通常表格拼接完成后,数据预处理后就可以对数据做分析了,对于数据分析所需要的的字段分析。 df=merge2[["用户ID","日期","城市","成交量","收入额"]] df
查看字段的属性。 df.info()
做收入额的条形图。 df["收入额"].plot(kind="bar")
飞利浦怡亚通数智化供应链平台,助力品牌拓展更广阔市场向静飞利浦健康生活事业群电商总经理01。怡亚通助力飞利浦完成从线下到线上转型飞利浦初入中国市场,一直与当地零售商进行合作完成渠道覆盖,通过自身的品牌力量管理终端业务模式,然而,面对
获国家高新技术企业认定,央视频融媒体发展有限公司再展硬实力互联网发展的核心依托于科学技术的创新研发与实际应用。近日,北京市2021年第一批国家高新技术企业名单公布,央视频融媒体发展有限公司(以下简称央视频公司)作为中央广播电视总台直属一级
送给老婆的月影蜂窝摇摇椅520的时候我给老婆精心的准备了一个礼物,那就是月影家居的月影蜂窝摇摇椅。这款摇椅当时也是单位的一位女同事推荐给我的。月影灯饰说她买的这款摇摇椅不仅外观时尚,新颖,而且做工上的用材
圈内人必看,消失已久的中轴重现江湖好看的城市千篇一律,申遗的北京中轴线万里挑一,正如中国著名建筑学家梁思成所说你看都是千篇一律,同时千变万化。而无限不循环的也有着变化万千的特点,在近千年的历史长河中,京城的发展脉络
极致游戏体验,黑鲨4S系列独家支持战神遗迹原画画质10月13日黑鲨科技召开2021黑鲨4S系列新品发布会,全新黑鲨4S系列正式发布!发布会上黑鲨宣布,全新黑鲨4S系列率先支持完美世界游戏旗下大型RPG手游战神遗迹原画画质,同时还将
因日本经济泡沫,所产生的Vintage时尚行业时尚是什么?该如何去定义?一千个人就有一千种说法,众口不一。但是在千万种时尚的定义中,又有一个共性喜爱时尚的人都想通过一些事物来表达自己。这些事物美好独特,令人倾心,经得起岁月磨砺
Vintage时尚海报那些旧时光的美人儿Vintage是一个耐人寻味的词汇,一套Vintage服饰,一个Vintage包包,一件Vintage珠宝,都充满着时光的各种痕迹,每个细节都在娓娓诉说那时的动人故事。经典的设计都
秀场新动向拼色时尚爆火潮流元素时尚秀场成为了潮人们的流行指南。在近日公布的2020春夏时装周上,拼色元素再一次爆火起来。鲜艳的暖色系与沉稳的冷色系即将在2020年激情邂逅,跳脱的活力独特的时尚感一扫冬季的阴霾。
灿烂自由行,拍性感小姐姐和爱车e1时间总是在悄无声息的溜走,当我们想挽留它时,它又在我们的指尖溜走而我们所能做的,就要用相机记录下生活中的美好,让美好成片,让记忆出彩。说到自由行,这是我和女友最喜欢做的事,要不然当
在不起眼的行业,山东烟台万华半年赚135亿,淄博富豪净利润翻2倍文丛树来源鲁商儒风2021年,很多企业的日子不好过,但也有不少企业日子大赚。人们似乎总喜欢把眼睛盯着风口,找热门行业,赚快钱,引起投资人的注意。近年来,从互联网电商光伏,到新能源汽
重大发现科学家意外发现了能吞食金属的细菌科学家们发现了一种以金属为食并从中获取热量的细菌,他们怀疑这种细菌存在了100多年,但从未得到证实。现在,加州理工学院的微生物学家在对一种常见的化学元素锰进行不相关的实验后,意外地