全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1109 0
2020-09-17
第一步:得到某支股票历年来的交易数据

方法见:https://blog.csdn.net/zwy_0309/article/details/108217342

在此,我使用以下脚本得到股票(代码:688022)在开始时间至现在的行情信息:

【脚本】

import tushare as ts
frame = ts.get_k_data('688022', start='2019-07-22')
print(frame)


【结果】

          date   open  close  high    low      volume   code

0   2019-07-22  67.60  50.19 68.99  33.53  17681055.0 688022

1   2019-07-23  40.98  44.45 47.55  40.98   6996702.0 688022

2   2019-07-24  45.18  50.72 50.85  45.18   9718576.0 688022

3   2019-07-25  52.00  55.17 60.65  52.00  11794163.0 688022

4   2019-07-26  53.52  51.70 55.45  50.44   7550641.0 688022

..         ...    ...    ...   ...    ...         ...    ...

279 2020-09-10  38.01  36.79 38.60  36.79    906319.0 688022

280 2020-09-11  36.83  37.30 37.88  36.33    841580.0 688022

281 2020-09-14  37.88  38.43 39.01  37.88   1095643.0 688022

282 2020-09-15  38.66  38.48 38.92  38.22    760755.0 688022

283 2020-09-16  38.80  39.30 39.61  38.01    993362.0 688022

[284 rows x 7 columns]

【说明】

2  以上结果中只展示了前5及后5条数据,如果想加载全部的数据,则在代码中增加一句话:pd.set_option('display.max_rows', None)

2  当然,有时列太多,也会显示不全,如果想显示全,则用pd.set_option('display.max_columns', None),


2  如果列太多换行了,则增加一个设置语句:pd.set_option('display.width', 500),其中500是整体显示的宽度,这样有的列不会换行。
第二步:设置时间序列索引

【脚本】

frame = frame.set_index('date')
frame.index = pd.to_datetime(frame.index)

【结果】

            open  close    high   low      volume    code

date                                                      

2019-07-22 67.60  50.19   68.99 33.53  17681055.0  688022

2019-07-23 40.98  44.45   47.55 40.98   6996702.0  688022


【说明】

在显示上与上面不同,date不再是列标题,而是变成了索引,之前的位置索引0、1、2……不见了。

另外,还需要将索引列转换为时间类型,使用的函数为to_datetime()


第三步:得到每天收盘价比前一天收盘时涨的费用


方法一:移动收盘价形成新的frame,再将两个frame的close列相减

【脚本】

frame1 = frame.shift(1)
print(frame1)
print(frame['close'] - frame1['close'])

【结果1】

            open  close   high   low      volume    code

date                                                     

2019-07-22    NaN   NaN    NaN    NaN        NaN     NaN

2019-07-23 67.60  50.19  68.99 33.53  17681055.0  688022

2019-07-24 40.98  44.45  47.55 40.98   6996702.0  688022

【结果2】

date

2019-07-22     NaN

2019-07-23  -5.74

              ...

2020-09-15    0.05

2020-09-16    0.82



【说明】

1、 对比原frame数据与【结果1】,发现frame1的数据都发生了向下位移1天的情况,而索引没有变化。

2、 【结果2】即为每天收盘价减前一天收盘价的增加量,即为股票涨了多少。

仔细看会发现,这样的结果中,索引列数据不是连续的,而是只有交易日的数据。


方法二:移动索引列形成新的frame,再将两个frame的close列相减

【脚本】

frame2 = frame.shift(-1, freq='D')
print(frame2)
print(frame['close'] - frame2['close'])


【结果1】

             open  close  high    low      volume   code

date                                                     

2019-07-21  67.60 50.19  68.99  33.53 17681055.0  688022

2019-07-22  40.98 44.45  47.55  40.98  6996702.0  688022

2019-07-23  45.18 50.72  50.85  45.18  9718576.0  688022

【结果2】

date

2019-07-21     NaN

2019-07-22    5.74

2019-07-23   -6.27

2019-07-24   -4.45

2019-07-25    3.47

              ...

2020-09-11     NaN

2020-09-13     NaN

2020-09-14   -0.05

2020-09-15   -0.82

2020-09-16     NaN

【说明】

索引列向后移动后,自动补了一天‘2019-07-21’,可以想到,后面每一周同样会补一个日期,而这个日期却不是交易日,在原frame中是不存在的。

由【结果2】可以看出,因为日期索引的移动与自动被充,会导致非交易日数据相减结果为“NaN”。这一情况,在方法一中是不存在的。


总结

以上方法,比循环使用“第i行数据减第i-1行数据”的方法执行效率高。

记住frame.shift()函数



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群