结合金融时间序列演示Pandas模块的操作(四)

本文详细介绍了如何使用Pandas模块在金融时间序列数据中进行数据框的拼接操作,包括按行拼接和按列拼接。通过示例展示了concat、merge和join函数的用法,涵盖了不同数据框的合并场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结合金融时间序列演示Pandas模块的操作(四)

 由于 Pandas 是 Python 的外部第三方模块,在使用前需要导入,并查询 Pandas 的版本号信息。

>>>import pandas as pd
>>>pd.__version__       #查询Pandas的版本号
'1.0.1'

一、数据框之间的操作

 对数据进行分析时,往往会出现同时需要多个数据框的情况,为了便于分析,可以将不同的数据框进行拼接,拼接分为两类:一类是按行拼接(上下结构);另一类是按列拼接(左右结构)。
 在 Pandas 中,关于数据框的拼接涉及3个函数,即 concat、merge 和 join,其中,concat 可以运用于按行、按列拼接,merge 和 join 则主要运用于按列拼接
 为便于演示,需要导入4个数据框,具体如下所述。

(一)生成新的数据框

 例1:从外部导入沪深300指数在2018年每日交易价格的数据并且生成一个新的数据框,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>HS300_excel1 = pd.read_excel('C:/Desktop/配套彩图和数据/沪深300指数(2018年).xlsx',sheet_name="Sheet1",header=0,index_col=0)  #导入外部数据
>>>HS300_excel1.head()    #运用head函数查看数据框的头部(最前面5行)数据
----------------------------------输出结果-------------------------------------
	         开盘点位	 最高点位	 最低点位	 收盘点位
日期				
2018-01-02	4045.2086	4087.7789	4045.2086	4087.4012
2018-01-03	4091.4607	4140.0543	4088.7302	4111.3925
2018-01-04	4114.1213	4137.6420	4105.8858	4128.8119
2018-01-05	4133.3439	4151.2818	4123.2817	4138.7505
2018-01-08	4140.8545	4166.3182	4127.3081	4160.1595
-----------------------------------代 码---------------------------------------
>>>HS300_excel1.tail()    #运用tail函数查看数据框的尾部(最末尾5行)数据
----------------------------------输出结果--------------------------------------
	         开盘点位	 最高点位	 最低点位  	收盘点位
日期				
2018-12-24	3015.4974	3040.3524	3007.3292	3038.1981
2018-12-25	3006.8787	3030.1418	2964.8750	3017.2815
2018-12-26	3012.8690	3029.0608	2996.4829	3002.0327
2018-12-27	3042.9491	3047.2348	2990.5057	2990.5057
2018-12-28	2994.7950	3024.3525	2984.8177	3010.6536

 例2:从外部导入沪深300指数在2016年每日交易价格的数据并且生成一个新的数据框,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>HS300_excel2 = pd.read_excel('C:/Desktop/沪深300指数.xlsx',sheet_name="Sheet2",header=0,index_col=0)
>>>HS300_excel2.head()
----------------------------------输出结果-------------------------------------
	         开盘点位	 最高点位	 最低点位	 收盘点位
日期				
2016-01-04	3725.8561	3726.2446	3468.9485	3469.0662
2016-01-05	3382.1769	3518.2170	3377.2799	3478.7797
2016-01-06	3482.4064	3543.7394	3468.4666	3539.8082
2016-01-07	3481.1499	3481.1499	3284.7374	3294.3839
2016-01-08	3371.8710	3418.8508	3237.9307	3361.5632
-----------------------------------代 码----------------------------------------
>>>HS300_excel2.tail()
----------------------------------输出结果-------------------------------------
             开盘点位	 最高点位	 最低点位	 收盘点位
日期				
2017-12-25	4057.4173	4086.9342	4026.4496	4041.5401
2017-12-26	4040.6173	4056.8554	4015.2996	4053.6224
2017-12-27	4045.2793	4047.7366	3986.7385	3991.2075
2017-12-28	3992.9970	4036.6975	3980.2358	4018.8974
2017-12-29	4022.8826	4043.1400	4012.8749	4030.8549

 例3:从外部导入2018年3月浦发银行、上海机场、中国石化这三只股票的日收盘价格数据,并且生成一个新的数据框,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>stock1 = pd.read_excel('C:/Desktop/关于2018年3月份股票价格数据.xlsx',sheet_name="Sheet1",header=0,index_col=0)   
>>>stock1    #输出全部数据
----------------------------------输出结果-------------------------------------
	      浦发银行 上海机场 中国石化
日期			
2018-03-01	12.47	49.33	6.39
2018-03-02	12.41	50.35	6.33
2018-03-05	12.42	50.22	6.39
2018-03-06	12.49	 NaN	6.47
2018-03-07	12.49	49.22	6.44
2018-03-08	12.47	49.64	NaN
2018-03-09	12.48	50.83	6.39
2018-03-12	12.50	50.09	6.45
2018-03-13	12.49	50.54	6.37
2018-03-14	12.39	49.84	6.42
2018-03-15	12.39	50.00	6.42
2018-03-16	12.30	49.34	6.42
2018-03-19	 NaN	50.14	6.59
2018-03-20	12.32	49.99	6.83
2018-03-21	12.29	49.99	6.85
2018-03-22	12.25	50.79	6.84
2018-03-23	11.71	50.78	6.83
2018-03-26	11.61	50.03	6.64
2018-03-27	11.62	49.32	6.64
2018-03-28	11.57	49.25	6.43
2018-03-29	11.62	47.65	6.62
2018-03-30	11.65	48.84	6.48

 例4:从外部导入2018年3月东方航空、宝钢股份这两只股票的日收盘价格数据,并且生成一个新的数据框,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>stock2 = pd.read_excel('C:/Desktop/关于2018年3月份股票价格数据.xlsx',sheet_name="Sheet2",header=0,index_col=0) 
>>>stock2      #输出全部数据
----------------------------------输出结果-------------------------------------
	       东方航空	宝钢股份
日期		
2018-03-01	7.6060	9.5103
2018-03-02	7.4473	9.1394
2018-03-05	7.4870	9.0443
2018-03-06	7.5961	9.1680
2018-03-07	7.4771	8.9587
2018-03-08	7.4870	8.9207
2018-03-09	7.5068	8.6544
2018-03-12	7.6258	8.7590
2018-03-13	7.5366	8.7780
2018-03-14	7.4076	9.0634
2018-03-15	7.3283	9.0729
2018-03-16	7.3184	8.9492
2018-03-19	7.1597	8.6734
2018-03-20	7.1796	8.7210
2018-03-21	7.1796	8.7115
2018-03-22	7.1796	8.6069
2018-03-23	7.1696	8.2550
2018-03-26	6.9118	7.9221
2018-03-27	7.0308	7.9887
2018-03-28	6.8821	7.9411
2018-03-29	7.0804	8.2169
2018-03-30	7.1498	8.1028

(二)函数 concat 的运用

 函数 concat 可用于将数据框按行、按列拼接,具体用法如下:

concat([数据框1,数据框2,...,数据框n],axis=0或1)

 注意,当参数axis=0时表示按行拼接,axis=1时则表示按列拼接。

1.按行拼接

 例5:以例1和例2生成的两个沪深300指数的日交易价格数据框按行拼接,最终生成2016年至2018年期间沪深300指数每日交易价格的数据框,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>HS300_new = pd.concat([HS300_excel2,HS300_excel1],axis=0)    #运用 concat 函数按行拼接
>>>HS300_new.head()      #查看头部五行
----------------------------------输出结果-------------------------------------
	         开盘点位	 最高点位	 最低点位	 收盘点位
日期				
2016-01-04	3725.8561	3726.2446	3468.9485	3469.0662
2016-01-05	3382.1769	3518.2170	3377.2799	3478.7797
2016-01-06	3482.4064	3543.7394	3468.4666	3539.8082
2016-01-07	3481.1499	3481.1499	3284.7374	3294.3839
2016-01-08	3371.8710	3418.8508	3237.9307	3361.5632
-----------------------------------代 码----------------------------------------
>>>HS300_new.tail()      #查看尾部五行
----------------------------------输出结果-------------------------------------
             开盘点位	 最高点位	 最低点位	 收盘点位
日期				
2018-12-24	3015.4974	3040.3524	3007.3292	3038.1981
2018-12-25	3006.8787	3030.1418	2964.8750	3017.2815
2018-12-26	3012.8690	3029.0608	2996.4829	3002.0327
2018-12-27	3042.9491	3047.2348	2990.5057	2990.5057
2018-12-28	2994.7950	3024.3525	2984.8177	3010.6536
2.按列拼接

 例6:运用例3生成的浦发银行、上海机场、中国石化这3只股票2018年3月的日收盘价形成的数据框 stock1,和例4生成的东方航空、宝钢股份这2只股票同期的日收盘价的数据框 stock2,将这两个数据框按列拼接,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>stock_new = pd.concat([stock1,stock2],axis=1)     #运用 concat 函数按行列接
>>>stock_new
----------------------------------输出结果-------------------------------------
	      浦发银行 上海机场 中国石化 东方航空 宝钢股份
日期					
2018-03-01	12.47	49.33	6.39	7.6060	9.5103
2018-03-02	12.41	50.35	6.33	7.4473	9.1394
2018-03-05	12.42	50.22	6.39	7.4870	9.0443
2018-03-06	12.49	 NaN	6.47	7.5961	9.1680
2018-03-07	12.49	49.22	6.44	7.4771	8.9587
2018-03-08	12.47	49.64	 NaN	7.4870	8.9207
2018-03-09	12.48	50.83	6.39	7.5068	8.6544
2018-03-12	12.50	50.09	6.45	7.6258	8.7590
2018-03-13	12.49	50.54	6.37	7.5366	8.7780
2018-03-14	12.39	49.84	6.42	7.4076	9.0634
2018-03-15	12.39	50.00	6.42	7.3283	9.0729
2018-03-16	12.30	49.34	6.42	7.3184	8.9492
2018-03-19	 NaN	50.14	6.59	7.1597	8.6734
2018-03-20	12.32	49.99	6.83	7.1796	8.7210
2018-03-21	12.29	49.99	6.85	7.1796	8.7115
2018-03-22	12.25	50.79	6.84	7.1796	8.6069
2018-03-23	11.71	50.78	6.83	7.1696	8.2550
2018-03-26	11.61	50.03	6.64	6.9118	7.9221
2018-03-27	11.62	49.32	6.64	7.0308	7.9887
2018-03-28	11.57	49.25	6.43	6.8821	7.9411
2018-03-29	11.62	47.65	6.62	7.0804	8.2169
2018-03-30	11.65	48.84	6.48	7.1498	8.1028

(三)函数 merge 的运用

 函数 merge 主要用于对不同数据框按列进行拼接。需要注意的是,在使用该函数时,需要明确放置在左侧(left)与右侧(right)的数据框。
 例7:沿用例3和例4中涉及的两个数据框stock1、stock2,运用函数 merge 按列拼接,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>pd.merge(left=stock1,right=stock2,left_index=True,right_index=True)
----------------------------------输出结果-------------------------------------
	      浦发银行 上海机场 中国石化 东方航空 宝钢股份
日期					
2018-03-01	12.47	49.33	6.39	7.6060	9.5103
2018-03-02	12.41	50.35	6.33	7.4473	9.1394
2018-03-05	12.42	50.22	6.39	7.4870	9.0443
2018-03-06	12.49	 NaN	6.47	7.5961	9.1680
2018-03-07	12.49	49.22	6.44	7.4771	8.9587
2018-03-08	12.47	49.64	 NaN	7.4870	8.9207
2018-03-09	12.48	50.83	6.39	7.5068	8.6544
2018-03-12	12.50	50.09	6.45	7.6258	8.7590
2018-03-13	12.49	50.54	6.37	7.5366	8.7780
2018-03-14	12.39	49.84	6.42	7.4076	9.0634
2018-03-15	12.39	50.00	6.42	7.3283	9.0729
2018-03-16	12.30	49.34	6.42	7.3184	8.9492
2018-03-19	 NaN	50.14	6.59	7.1597	8.6734
2018-03-20	12.32	49.99	6.83	7.1796	8.7210
2018-03-21	12.29	49.99	6.85	7.1796	8.7115
2018-03-22	12.25	50.79	6.84	7.1796	8.6069
2018-03-23	11.71	50.78	6.83	7.1696	8.2550
2018-03-26	11.61	50.03	6.64	6.9118	7.9221
2018-03-27	11.62	49.32	6.64	7.0308	7.9887
2018-03-28	11.57	49.25	6.43	6.8821	7.9411
2018-03-29	11.62	47.65	6.62	7.0804	8.2169
2018-03-30	11.65	48.84	6.48	7.1498	8.1028

 函数 merge 中的参数 left_index 表示是否按照左侧数据框的行索引拼接,输入 True 则代表是、False 代表否,参数 right_index 则代表是否按照右侧数据框的行索引拼接,用法与 left_index 一致。在本例中,由于两个数据框的行索引完全相同,因此采用同时按照两个数据框的行索引进行拼接。

(四)函数 join 的运用

 函数 join 用于对不同数据框进行按列拼接,其用法如下:

数据框1.join(数据框2,on='参数')

 其中,函数 join 中的参数 on 表示按照某个或某几个索引进行合并,默认情况是按照两个数据框的行索引进行拼接。
 例8:沿用例3和例4中涉及的两个数据框stock1、stock2,运用函数 join 按列拼接,具体代码如下:

-----------------------------------代 码----------------------------------------
>>>stock1.join(stock2,on='日期')
----------------------------------输出结果-------------------------------------
	      浦发银行 上海机场 中国石化 东方航空 宝钢股份
日期					
2018-03-01	12.47	49.33	6.39	7.6060	9.5103
2018-03-02	12.41	50.35	6.33	7.4473	9.1394
2018-03-05	12.42	50.22	6.39	7.4870	9.0443
2018-03-06	12.49	 NaN	6.47	7.5961	9.1680
2018-03-07	12.49	49.22	6.44	7.4771	8.9587
2018-03-08	12.47	49.64	 NaN	7.4870	8.9207
2018-03-09	12.48	50.83	6.39	7.5068	8.6544
2018-03-12	12.50	50.09	6.45	7.6258	8.7590
2018-03-13	12.49	50.54	6.37	7.5366	8.7780
2018-03-14	12.39	49.84	6.42	7.4076	9.0634
2018-03-15	12.39	50.00	6.42	7.3283	9.0729
2018-03-16	12.30	49.34	6.42	7.3184	8.9492
2018-03-19	 NaN	50.14	6.59	7.1597	8.6734
2018-03-20	12.32	49.99	6.83	7.1796	8.7210
2018-03-21	12.29	49.99	6.85	7.1796	8.7115
2018-03-22	12.25	50.79	6.84	7.1796	8.6069
2018-03-23	11.71	50.78	6.83	7.1696	8.2550
2018-03-26	11.61	50.03	6.64	6.9118	7.9221
2018-03-27	11.62	49.32	6.64	7.0308	7.9887
2018-03-28	11.57	49.25	6.43	6.8821	7.9411
2018-03-29	11.62	47.65	6.62	7.0804	8.2169
2018-03-30	11.65	48.84	6.48	7.1498	8.1028

注:所有数据均来自《基于Python的金融分析与风险管理》一书的配套资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值