pandas数据合并之append与concat

pandas的数据合并与重塑有很多种方法,包括直接复制列,concat,append,merge和join,本文将重点讨论前面三种最简单而又最常用的方法。merge和join有空再更哈☺。

一. 直接复制列

可以将新的数据列利用 [] 直接赋值给原始数据,但是要求新的列名不能和原始数据中的列名重名,否则会覆盖原始数据中的列。
具体来看:


可以看到新的数据块被直接贴在了原数据列的后面,是不是很简单,嗯但是这个方法有很多局限性,比如:

  • 只能按列合并,不能按行合并操作。
  • 只能给原数据中存在的index添加新列,不会给原数据添加新行(index)。这种合并方法是以原始数据index为基准的,也就是说,新老数据的交集行会被直接保留,老数据有的而新数据没有的索引行将会补nan值,新数据有的而老数据没有的索引行,将会被舍弃。可以看到,例子中index=3的行就被舍弃了,而index=0的行被设为了nan。

二. append

前面已经有了合并列的方法,那么pandas不会这么坑爹,不能合并行吧!!当然不会,append就是干这个事情的,它专门用来在表尾添加新行...
熟悉Python的大佬们看到append这个词就应该有感觉了,没错,它就是添加新元素的方法。Seris,DataFrame,Index都有这个方法,我们可以利用这个添加新元素的方法,来对数据进行纵向合并。
官方文档中是这样描述append的用途的“在表尾中添加新行,并且返回添加后的数据对象,如果添加的行中存在原数据中没有的列,那么将给原数据添加一个新列,并用nan补值。”
DataFrame.append(*other*, *ignore_index=False*, *verify_integrity=False*, *sort=None*)

  • other: 是要添加的数据,append很不挑食,这个other可以是dataframe,dict,Seris,list等等。
  • ignore_index: 参数为True时将在数据合并后,按照0,1,2,3....的顺序重新设置索引,忽略了旧索引。
  • verify_integrity:参数为True时,如果合并的数据与原数据包含索引相同的行,将报错。

我们来看个栗子:


三. concat

concat函数是在pandas命名空间下的方法,所以通过pd.concat()的方式来引用,它可以将数据根据不同的轴作做融合。concat 与其说是连接,更准确的说是拼接。就是把两个表直接合在一起。于是有一个突出的问题,是横向拼接还是纵向拼接。

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)
常用参数:
obj:要合并的series,dataframe或者是panel构成的序列,常将这些数据排成一个列表[data1,data2....]。
axis:按照哪个方向拼接,0是纵向拼接(默认),1是横向拼接。
join:设置合并取交集(inner)还是并集(outer)。纵向拼接时取column的交并集,横向拼接时取index的交并集。
join_axes:index的列表,仅在横向合并时使用,指明要将数据合并入哪个原表的index。
ignore_index:如果设置为true,则无视表的index,直接合并,合并后生成新的index。
keys:表标识的列表,用来区分合并的表来自哪里。

1. 纵向合并

纵向合并axis=0,是将表在竖直方向拼接起来,此时join参数控制的是column的交集或者并集,使用join_axes会报错。举个栗子....



我们看到join参数控制着column的交并集。如果取并集,不存在的位置会被补充上nan。
另外,如果我们设置了ignore_index=True的话,数据合并后将会重新按照0,1,2,3.......的顺序重新构建索引。


2. 横向合并

横向合并axis=1,是将表在水平方向拼接起来,此时join参数控制的是index的交集或者并集。
横向合并时,即便是列名相同,也不会合并成一列,因为此时join控制的是index的交并集。而ignore_index将会重排列名的索引,而不是重排index。



再来个index并集的栗子.....


  • join_axes参数

如果有join_axes的参数传入,可以指定根据哪个index来对齐数据 。例如根据df1表对齐数据,就会保留指定的df1表的index,然后将df4的表与之拼接,仅axis=1时有效。是不是有种熟悉的感觉,嗯对,和直接复制列一样.....
result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])

join_axes

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 利用pandas数据合并与重塑 1.concat函数 concat函数是在pandas下的方法,可以将数据根据不同...
    w春风十里w阅读 13,238评论 0 1
  • 什么是pandas pandas是python的一个数据分析包,是基于NumPy的一种工具,该工具是为了解决数据分...
    TensorFlow开发者阅读 7,186评论 0 27
  • Pandas类似R语言中的数据框(DataFrame),Pandas基于Numpy,但是对于数据框结构的处理比Nu...
    井底蛙蛙呱呱呱阅读 5,823评论 1 7
  • 简介 开启慢查询日志,可以让mysql记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系...
    zyqcoder阅读 1,846评论 0 0
  • 最近上班,甚感倦意,几次想请假的念头都被无从可去掐灭.有时候想若是实现了财务自由,你想做什么,细想一下,还真没什么...
    语以笔阅读 1,150评论 0 1