由于需要整合两份不同的数据,所以需要使用数据合并的方法。在这之前,一直使用R来对数据框进行操作,而如今正好想学一学Python,更深入地了解pandas
库的使用,所以尝试使用pandas
来进行数据合并。
在上网查阅相关资料之后,其实使用pandas
进行数据合并还是非常简单的,但是实际操作之后其实感觉没有R用的顺手,可能是由于先接触的R,然后再接触的Python的缘故。
首先如果要使用pandas库中的函数,在python的前面需要载入这个库:
import pandas as pd
append
关于pandas
库中对数据框的拼接,其实有很多中方法,其中比较常用方便快捷的是使用append
。假设有两个数据框df1
与df2
,只需要下述操作即可:
df = df1.append(df2)
需要注意的是:这里和list
中的append
不同,这里的append
不是改变原来的数据框,返回一个拼接后的新的数据框,在这里我们就赋给了一个新的数据框df
。
但是使用这样进行拼接有很多功能实现不了,又或者你可能会问,我们能不能像list
中的append
一样不用copy一个新的,直接修改原本的数据框即可。答案是肯定的。
concat
这里就需要使用concat
来进行操作了。
在这之前,我们使用concat
也可以完成前面append
的操作,只需使用如下的命令即可:
df = pd.concat([df1, df2], axis = 0)
其中axis = 0
表示上下拼接粘贴行,axis = 1
就是左右拼接粘贴列,当然,默认就是0。
回到前面的问题,如果我们想要像list
中的append
一样不用copy一个新的,直接修改原本的数据框。其实只需要修改其中的一个参数:copy = False
即可。此时代码变成:
df = pd.concat([df1, df2], axis = 0, copy = False)
此外还有一些常用操作的参数:
join = 'outer'
,表示取并;’inner’则是取交。
ignore_index = Ture
,则会重新分配index从0…n-1。
下面我们再介绍一个更厉害的数据拼接的工具:merge
merge
同样也可以实现前面的append
的操作,只需使用如下的代码即可:
df = pd.merge(df1, df2, left_index = True, right_index = True, how = 'outer')
merge
里面的功能就非常多了,这里参考大神博客:https://www.jianshu.com/p/dc8ba1c0eada
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
left: 一个dataframe对象
right: 另一个dataframe对象
how: 可以是'left', 'right', 'outer', 'inner'. 默认为inner。
on: 列名,两个dataframe都有的列。如果不传参数,
而且left_index和right_index也等于False,
则默认把两者交叉/共有的列作为链接键(join keys)。
可以是一个列名,也可以是包含多个列名的list。
left_on: 左边dataframe的列会用做keys。可以是列名,
或者与dataframe长度相同的矩阵array。
right_on: 右边同上。
left_index: 如果为Ture,用左侧dataframe的index作为
连接键。如果是多维索引,level数要跟右边相同才行。
right_index: 右边同上。
sort: 对合并后的数据框排序,以连接键。
suffixes: 一个tuple,包字符串后缀,用来加在重叠的列名后面。
默认是('_x','_y')。
copy: 默认Ture,复制数据。
indicator: 布尔型(True/FALSE),或是字符串。
如果为True,合并之后会增加一列叫做'_merge'。
是分类数据,用left_only, right_only, both来标记
来自左边,右边和两边的数据。
强行合并
这里需要强调一点是:Python中的拼接都是根据列名来进行,如果你有两个不一样的数据框,比如说:一个列名是:['a', 'b', 'c', 'd']
,另一列列名是['e', 'f', 'g', 'h']
,如果我们想直接像R使用rbind
一样使用append
等函数,粘上去就会出问题,这时就需要修改一列的列名,例如将一列的列名赋值给另一列的列名。
df1.columns = list(df2)
之后再进行前面所述的拼接即可。
当然关于pandas
的进行数据拼接,还有很多操作,具体可以查看其Cheat Sheet
,在上一篇博客中有提到:pandas库随笔——Cheat Sheet与数据读取。