python横向合并数据哪个更常用一些

Python014

python横向合并数据哪个更常用一些,第1张

join主要用于基于索引的横向合并拼接;

merge主要用于基于指定列的横向合并拼接;

concat可用于横向和纵向合并拼接;

append主要用于纵向追加;

combine可以通过使用函数,把两个DataFrame按列进行组合。

join

join是基于索引的横向拼接,如果索引一致,直接横向拼接。如果索引不一致,则会用Nan值填充merge是基于指定列的横向拼接,该函数类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面。

可以指定不同的how参数,表示连接方式,有inner内连、left左连、right右连、outer全连,默认为inner

在日常工作中经常回用到数据分析与统计工作,而在实施数据分析之前,最为最要的就是数据的搜集、整理工作。这里介绍一下多个相同格式的excel合并的处理。如果在excel文件表比较少时,手工合并还可以应付,当几十个几百个甚至更多的表时,手工合并效率会非常低,于是让计算机自动合并处理,帮助我们完成工作就显得非常有必要。

比如,在“2019年集团大学生招聘”下有两个表格,想要实现的是将这两个表格数据合并。

各个表中的数据格式如下图:

结果:

有时候表格存放在文件夹下,现在需要将不同文件夹下的表格合并,此时需要对程序进行简单的修改。

文件目录结构如下:

在此之前需要先了解一下os模块中的walk方法:

结果:

注意:os.walk()方法,它可以查询到目录下不同文件夹中的文件。其中,x代表的是文件路径,y代表的是目录下的文件夹,z代表的是目录下的文件。

结果:

最后,需要注意,以上只是一个简单的程序,对于数据量不是很大的场景,可以放心使用。但当数据量非常大时,程序还需要进一步优化,因为程序是将所有的数据保存在一个列表中,最后再一次性写入excel表中,这里需要考虑excel版本是否支持大数据量的写入,另外,也要考虑程序资源消耗的问题,内存可能不足。

Created on Mon Mar 16 11:23:05 2015

@author: admin

"""

# 分批次运行,先得到books, 再运行,利用print 来debugimport pandas as pd

import numpy as np

import matplotlib as pl

import os

count=0

#ori_path='xx'

ori_path='C:\Python27\data\sample'

def get_xls_books(ori_path): # get target filename and dir of a pathtemp = list(os.walk(ori_path)) #tmp is list ,tmp[0]该目录文件路径和文件名, tmp[1]:子目录文件路径,文件名称book_path=[]

book_name=[]

root=temp[0][0]

for i in temp[0][2]:

if os.path.splitext(i)[1] == '.xlsx': #splite filenameobj_path=os.path.join(root,i)

book_path.append(obj_path)

book_name.append(os.path.splitext(i)[0])

return zip(book_path, book_name)

def get_xls_sheets(obj_path): #get all sheets of a object pathxls=pd.ExcelFile(obj_path)

sheet_names=xls.sheet_names

sheets=[xls.parse(i) for i in range(0,len(sheet_names)) ] # use parse can get dataframe saved into a listreturn zip(sheet_names,sheets)

books=get_xls_books(ori_path) # book paths list#xls=pd.ExcelFile(books[0])

#print xls.parse(0).columns

for book in books: # this loop get a bookbookname=book[1]

bookpath=book[0]

sheets=get_xls_sheets(bookpath) # get all sheets and names from book pathfor i in range(len(sheets)): #operate each sheet, is range(len) not lensheetname=sheets[i][0]

name=bookname+'-'+sheetname+'.'+'csv'

pd_sheet=sheets[i][1] # dataFrame

cols=pd_sheet.columns

pdf=pd_sheet[[cols[17],cols[18],cols[4],cols[6],cols[8],cols[10],cols[19],cols[16]]] # use emunerate functionpdf.columns=['area','patch','wangdian','operator','custid','servid','servtype','is_identify'] # renamepdf1=pdf[pdf['is_identify']=='是'] #filterpdf2=pdf1.drop('is_identify',1)

pdf2.to_csv(os.path.join(ori_path,name), header=None, index=None)