Python数据分析笔记#8.2.2 索引上的合并

Python032

Python数据分析笔记#8.2.2 索引上的合并,第1张

「目录」

数据规整:聚合、合并和重塑

Data Wrangling: Join, Combine, and Reshape

-------->数据库风格的DataFrame合并

--------> 索引上的合并

上一篇笔记讲的是如何根据DataFrame的列名来链接两个DataFrame对象。

有时候我们要根据DataFrame中的index索引来合并数据。这种情况下,我们可以传入 left_index=True或right_index=True 或两个都传入来说明索引被用作链接键。

我们先创建两个DataFrame,指明根据第一个DataFrame的'key'列和第二个DataFrame的index索引来合并数据:

默认的merge方法是求取链接键的交集,通过传入how='outer'可以得到它们的并集:

层次化索引数据的合并

对于层次化索引的数据的合并,我们要以 列表的形式指明用作合并键的多个列 。

比如下面我们就指定根据第一个DataFrame的'key1'列和'key2'列以及第二个DataFrame的index索引来合并:

同时使用双方的索引来合并也没问题:

join方法

DataFrame还有便捷的实例方法join,它能更方便的实现按索引合并,但要求没有重叠的列。

我们还可以向join传入一组DataFrame,类似于concat函数,实现多个DataFrame的合并拼接:

-END-

append 方法根据行在原数据框添加新的数据框。

如果想要合并后的数据框索引重写排序,可以设置参数 ignore_index=True 。

concat 函数是panda自带的,可以按行或按列合并多个pandas数据框。

按行合并多个数据框,需要注意的是 objs参数接受一个可迭代对象 。concat函数默认按行合并。

设置 ignore_index=True ,使合并后的数据框索引重新排序。

按行合并时,concat对所有的列进行全连接(参数 join='outer' ),没有的列会填充为NaN。

设置参数 join='inner' ,可以只保留共有的列。

设置参数 axis=1 或 axis='columns' ,可以按列合并多个数据框。

merge 方法根据列或索引连接数据框。

当两个数据框只有一个相同列时, merge 方法会自动根据相同列进行内连接, on 参数可以省略。

设置参数 how=['left','right','outer','inner','cross'] ,可以完成不同类型的连接。

当两个数据框没有相同列时,需要设置 left_on 和 right_on 参数,表示按这两列进行连接。

如果需要根据数据框的索引进行连接,需要根据需求设置参数 left_index=True 或者 right_index=True 。

设置 suffixes ,可以给相同的列名添加后缀。默认后缀是 _x , _y 。

join 方法与 merge 方法作用相同,基本上 merge 方法已经可以完成所有的连接操作。

join 方法对按索引连接更方便而已。

当连接的两个数据框中没有相同列时,可以直接按索引进行左连接。

同样,可以设置 how 参数,控制连接的行为。

当数据框中有相同列时,需要设置后缀。

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

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

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

结果:

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

文件目录结构如下:

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

结果:

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

结果:

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