pandas库随笔——数据拼接与合并

由于需要整合两份不同的数据,所以需要使用数据合并的方法。在这之前,一直使用R来对数据框进行操作,而如今正好想学一学Python,更深入地了解pandas库的使用,所以尝试使用pandas来进行数据合并。

在上网查阅相关资料之后,其实使用pandas进行数据合并还是非常简单的,但是实际操作之后其实感觉没有R用的顺手,可能是由于先接触的R,然后再接触的Python的缘故。

首先如果要使用pandas库中的函数,在python的前面需要载入这个库:

import pandas as pd

append

关于pandas库中对数据框的拼接,其实有很多中方法,其中比较常用方便快捷的是使用append。假设有两个数据框df1df2,只需要下述操作即可:

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与数据读取

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值