目录

  • 工具包准备
  • 纵向合并
  • 横向合并
  • 总结
  • 附录代码


工具包准备

python3 合并svg python合并数据表_内连接

纵向合并

数据准备

初始数据为包含3个工作簿的Excel工作表,3个工作簿的列标签都一致。

python3 合并svg python合并数据表_数据分析_02


这里附上数据表:workbook1.xlsx读取数据

python3 合并svg python合并数据表_数据分析_03


读取上面三个工作簿的数据以DataFrame格式存储,并查看其中一个:

(前两个sheet各有100行数据,第三个sheet有112行数据,不计首行)

python3 合并svg python合并数据表_内连接_04

合并数据

1)pd.concat()方法

python3 合并svg python合并数据表_python3 合并svg_05


得到的数据表结果显示“312 rows × 9 columns”,共312行9列,数据纵向合并成功。

没完,发现数据展示的最后一行的索引值是“111”,这么一看数据好像只有112行?

(其实是一个简单问题,活跃下气氛,大佬们略过就好_(:з」∠)_)

这里是因为数据合并是原数据表的索引没有重置,可以添加参数 “ignore_index=True” 重置索引再合并:

python3 合并svg python合并数据表_数据分析_06

除此之外,还可以使用reset_index()直接对新表进行索引重置,语法如下:

#重置表S的索引
S.reset_index()

当需要合并的表格有多个时,可以构建for循环来简化操作,如下:

python3 合并svg python合并数据表_数据分析_07

这里循环构建的前提是各个sheet名之间有一定的规律性。

2)append()方法

python3 合并svg python合并数据表_数据分析_08

同样在多表合并时也可以利用for循环:

python3 合并svg python合并数据表_python3 合并svg_09

横向合并

数据准备

python3 合并svg python合并数据表_数据_10

python3 合并svg python合并数据表_内连接_11


两个数据表:t1.csvt2.csv,都是拆分后的景点信息,可以按 t1 的 dname1 和 t2 的 dname2作为匹配条件进行匹配合并。

DataFrame 横向合并使用的函数是 pd.merge(),合并逻辑类似 SQL 当中的内外连接查询,具体就不展开了,可以参考我的这一篇博客:SQL学习笔记2——内、外连接查询,使用的是同样的数据。

下面开始实操:

合并数据

1)内连接

这里的参数“ how=‘inner’ ”是可以省略的,默认合并方式就是以内连接形式

python3 合并svg python合并数据表_python_12

对比SQL当中内连接的结果,可以看到是一模一样的:

python3 合并svg python合并数据表_内连接_13


2)外连接

外连接同理,连接结果与SQL当中的外连接是一样的,下面直接放图对比。

左连接:

python3 合并svg python合并数据表_数据_14

python3 合并svg python合并数据表_数据分析_15


右连接

python3 合并svg python合并数据表_数据分析_16

python3 合并svg python合并数据表_python_17

总结

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