Pandas必备技能之“花式拼接表格”

TUSHARE 金融与技术学习兴趣小组

翻译整理 | Little monster

通常来说,我们需要的数据不可能都来自同一张表格,所以了解如何对不同格式的表格进行拼接、合并是非常重要的。

本文将介绍Pandas库中常用的合并表格的方法,包括.append(), pd.concat(), pd.merge(), 并配合实例进行讲解。

【工具】Python 3

【数据】Tushare

【注】示例注重的是方法的讲解,请大家灵活掌握。

01

上下拼接

用.append()【1】方法可以实现表格的上下拼接,一般来说它们会有相同的列名,比如,上下拼接两只股票的日线数据。

表格df的数据在上,表格df1的数据在下,注意到拼接之后的索引并没有随新表更新,这一问题可以通过设置参数ignore_index=True来解决。

如果想要批量拼接,可以写一个循环,如将截至某日的所有上市公司股票日线数据拼接成一个大表格,示例中选取的时间段为'20180101'-'20180105',并只选取了前5只股票,效果如下。

用pd.concat()【2】也能实现上面的效果,同样通过设置参数ignore_index=True来解决索引问题,这里的axis=0为默认值,默认按行拼接。

02

左右拼接

pd.concat()不仅能够实现上下拼接,而且还能通过设置参数axis=1实现左右拼接。以拼接两个不同长度的表格为例,没有值的位置会自动填充为NaN。

如果想要按列拼接有相同索引的行,可以设置参数join='inner',设置参数sort=True升序排列。以两个索引为时间的表格为例,效果如下。

03

合并表格

pd.merge()【3】方法可以实现表格之间的合并操作,类似于SQL中的连接JOIN的用法。通过设置参数how='left', 'right', 'outer', 'inner',默认为 'inner' ,实现不同形式的合并。

how='inner'

设置参数on='trade_date' 表示两个表格将按照列'trade_date' 中的值进行合并,当参数how为默认值'inner'时,结果和用pd.concat()方法设置参数join='inner'得到的类似。

区别在于,pd.merge()操作会自动为合并前有相同列名、不同值的列名添加后缀,以便我们进行区分,如下所示的'close_x'和'close_y'。

如果想要让后缀名变得更有意义,可以通过设置参数suffixes=['_000001', '_000002']实现。

如果两个表格中想要进行合并的列名不同,如下所示的表格df中的交易日期列名为'trade_date_stock',表格df_index中的交易日期列名为'trade_date',这时需要我们设置参数left_on和right_on指定要进行合并的列名。

参数on也可以传入一个包含多个列名的list,如['ts_code', 'trade_date'],此时在默认how='inner'的情况下, 合并后只会返回['ts_code', 'trade_date']值在两个表格中都相等的行。

我们还可以通过设置参数how='left', how='right', how='outer', 分别进行左连接、右连接和外连接。

how='left'

左连接的示意图如上所示,从下面示例代码返回的结果可以观察到,左连接会保留左侧表格的所有数据,以及两个表格按照on设置的条件合并后重合的部分,没有数据的地方会自动填充NaN值。

how='right'

同理,右连接则会保留右侧表格的所有数据,以及两个表格按照on设置的条件合并后重合的部分,没有数据的地方会自动填充NaN值。

how='outer'

外连接的示意图如上所示,返回满足合并条件的所有行,没有数据的地方会自动填充NaN值。

04

总结

本文介绍了Pandas中常用的合并表格的方法,分别为.append(), pd.concat()和pd.merge(),我们观察到,通过设置不同的参数值,可以对表格进行不同形式的拼接、合并操作。

如果想要批量拼接、合并,可以通过写循环来实现。有关这三种方法的官方文档链接已附在下面,感兴趣的话可以自行查看所有可设置的参数,解锁新功能!

END

更多内容请关注“挖地兔”公众号。

网页链接【1】

网页链接【2】

网页链接【3】

网页链接【Datacamp】

Pandas必备技能之“时间序列数据处理”

基于Neo4j和Tushare数据构建小型金融知识图谱

Python+SQL无敌组合,值得你Pick!

这些方法解决了数据清洗80%的工作量

如何正确使用Pandas库提升项目的运行速度?

利用Python玩转PDF,简单实用

雪球转发:2回复:1喜欢:4

全部评论

清风明月道06-20 11:51

我刚打赏了这篇帖子 ¥100.00,也推荐给你。