Python学习笔记7 | 您所在的位置:网站首页 › python做数据清理 › Python学习笔记7 |
目录
工具包准备纵向合并横向合并总结附录代码
工具包准备
纵向合并
数据准备: 初始数据为包含3个工作簿的Excel工作表,3个工作簿的列标签都一致。 这里附上数据表:workbook1.xlsx 读取数据: 读取上面三个工作簿的数据以DataFrame格式存储,并查看其中一个: (前两个sheet各有100行数据,第三个sheet有112行数据,不计首行) 合并数据: 1)pd.concat()方法 得到的数据表结果显示“312 rows × 9 columns”,共312行9列,数据纵向合并成功。 没完,发现数据展示的最后一行的索引值是“111”,这么一看数据好像只有112行? (其实是一个简单问题,活跃下气氛,大佬们略过就好_(:з」∠)_) 这里是因为数据合并是原数据表的索引没有重置,可以添加参数 “ignore_index=True” 重置索引再合并: 除此之外,还可以使用reset_index()直接对新表进行索引重置,语法如下: #重置表S的索引 S.reset_index()当需要合并的表格有多个时,可以构建for循环来简化操作,如下: 这里循环构建的前提是各个sheet名之间有一定的规律性。 2)append()方法 同样在多表合并时也可以利用for循环: 横向合并数据准备: 两个数据表:t1.csv、t2.csv,都是拆分后的景点信息,可以按 t1 的 dname1 和 t2 的 dname2作为匹配条件进行匹配合并。 DataFrame 横向合并使用的函数是 pd.merge(),合并逻辑类似 SQL 当中的内外连接查询,具体就不展开了,可以参考我的这一篇博客:SQL学习笔记2——内、外连接查询,使用的是同样的数据。 下面开始实操: 合并数据: 1)内连接 这里的参数“ how=‘inner’ ”是可以省略的,默认合并方式就是以内连接形式 对比SQL当中内连接的结果,可以看到是一模一样的: 2)外连接 外连接同理,连接结果与SQL当中的外连接是一样的,下面直接放图对比。 左连接: 右连接: 总结1) 两个或多个DataFrame之间可以纵向或横向合并,纵向合并增添行,横向合并增添列; 2) 纵向合并通常会利用 xlrd工具包来获取 Excel 工作表的 sheet名,可以使用 pd.concat() 或 append() 方法进行合并; 3) 横向合并类似SQL中的内外连接查询,根据需求对应进行内连接、左连接、右连接等操作。 附录代码 import pandas as pd import xlrd import os os.chdir('D:\practice') #设置当前工作路径 ****纵向合并**** workbook = xlrd.open_workbook('workbook1.xlsx') #打开指定Excel工作表 sheetname = workbook.sheet_names() #读取sheet名 sheetname #获取workbook1中各工作簿的数据 s1 = pd.read_excel('workbook1.xlsx',sheet_name = 'Sheet1') s2 = pd.read_excel('workbook1.xlsx',sheet_name = 'Sheet2') s3 = pd.read_excel('workbook1.xlsx',sheet_name = 'Sheet3') s3 #查看其中一个表的数据 #合并上面的3个表 S = pd.concat([s1,s2,s3],axis=0) #axis=0表示按行操作 S S = pd.concat([s1,s2,s3],axis=0,ignore_index=True) #重置索引合并 S #构建for循环 DF = pd.DataFrame() for i in sheetname: DF_i = pd.read_excel('workbook1.xlsx',sheet_name = i) DF = pd.concat([DF,DF_i],axis=0,ignore_index=True) DF #append方法合并 S = s1.append([s2,s3],ignore_index=True) S #构建for循环 DF = pd.DataFrame() for i in sheetname: DF_i = pd.read_excel('workbook1.xlsx',sheet_name = i) DF = DF.append([DF_i],ignore_index=True) DF ****横向合并**** t1 = pd.read_csv('t1.csv') t1 t2 = pd.read_csv('t2.csv') t2 #内连接 T1 = pd.merge(left=t1,right=t2,how='inner',left_on='dname1',right_on='dname2') T1 #左外连接 T2 = pd.merge(left=t1,right=t2,how='left',left_on='dname1',right_on='dname2') T2 #右外连接 T3 = pd.merge(left=t1,right=t2,how='right',left_on='dname1',right_on='dname2') T3 |
CopyRight 2018-2019 实验室设备网 版权所有 |