pandas数据合并之append与concat
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas数据合并之append与concat相关的知识,希望对你有一定的参考价值。
参考技术Apandas的数据合并与重塑有很多种方法,包括直接复制列,concat,append,merge和join,本文将重点讨论前面三种最简单而又最常用的方法。merge和join有空再更哈☺。
可以将新的数据列利用 [] 直接赋值给原始数据,但是要求新的列名不能和原始数据中的列名重名,否则会覆盖原始数据中的列。
具体来看:
可以看到新的数据块被直接贴在了原数据列的后面,是不是很简单,嗯但是这个方法有很多局限性,比如:
前面已经有了合并列的方法,那么pandas不会这么坑爹,不能合并行吧!!当然不会,append就是干这个事情的,它专门用来在表尾添加新行...
熟悉Python的大佬们看到append这个词就应该有感觉了,没错,它就是添加新元素的方法。Seris,DataFrame,Index都有这个方法,我们可以利用这个添加新元素的方法,来对数据进行纵向合并。
官方文档中是这样描述append的用途的“在表尾中添加新行,并且返回添加后的数据对象,如果添加的行中存在原数据中没有的列,那么将给原数据添加一个新列,并用nan补值。”
DataFrame.append(*other*, *ignore_index=False*, *verify_integrity=False*, *sort=None*)
我们来看个栗子:
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:表标识的列表,用来区分合并的表来自哪里。
纵向合并axis=0,是将表在竖直方向拼接起来,此时join参数控制的是column的交集或者并集,使用join_axes会报错。举个栗子....
我们看到join参数控制着column的交并集。如果取并集,不存在的位置会被补充上nan。
另外,如果我们设置了ignore_index=True的话,数据合并后将会重新按照0,1,2,3.......的顺序重新构建索引。
横向合并axis=1,是将表在水平方向拼接起来,此时join参数控制的是index的交集或者并集。
横向合并时,即便是列名相同,也不会合并成一列,因为此时join控制的是index的交并集。而ignore_index将会重排列名的索引,而不是重排index。
再来个index并集的栗子.....
如果有join_axes的参数传入,可以指定根据哪个index来对齐数据 。例如根据df1表对齐数据,就会保留指定的df1表的index,然后将df4的表与之拼接,仅axis=1时有效。是不是有种熟悉的感觉,嗯对,和直接复制列一样.....
result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])
以上是关于pandas数据合并之append与concat的主要内容,如果未能解决你的问题,请参考以下文章
Pandas DataFrame concat vs append