在做FinTech分析的时候,需要引用tushare库,但是从tushare库引用出来的dataframe一般都是倒序的。先上错误代和运行数据。
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
#导入相关的库
style.use('ggplot')
pd.set_option('display.max_columns',None)
pd.set_option('display.max_row',None)
df = ts.get_hist_data('000001')
#设置数据读取范围
df.to_csv('000001.csv')
#将数据以CSV的格式储存在同一文件夹下
df_read_from_csv=pd.read_csv('000001.csv',parse_dates=True,index_col=0)
#读取数据
df_read_from_csv['ma7']=df_read_from_csv['close'].rolling(window=7).mean()
print(df_read_from_csv['ma7'].head (10))
print(df_read_from_csv['ma7'].tail (10))
#输出7天移动平均头10个和尾10个数据
但是在计算Moving Average的时候是以某一天向前计算的,比如计算MA7,那么7月9日的MA7就是从7月3日到7月9日。
但是如果单纯从tushare库里导出的dataframe实际上是倒序的,让我们运行一下上面的代码,结果如下:
如运行结果所示,实际上在计算7月9日的MA7时,是从7月9日到7月17日的,所以显然计算是相反的。
那么为了解决这种dataframe倒序的问题,就需要对一开始输出dataframe进行倒序处理,得到正序的dataframe。
只需要在刚刚那段代码的最后一部分,进行一个倒序处理即可:
df_read_from_csv_reverse_order=df_read_from_csv.sort_index(ascending=True)
#倒序处理
df_read_from_csv_reverse_order['ma7']=df_read_from_csv_reverse_order['close'].rolling(window=7).mean()
print(df_read_from_csv_reverse_order['ma7'].head (10))
print(df_read_from_csv_reverse_order['ma7'].tail (10))
经过上述操作,再运行一下,结果如下:
这样计算出来的,MA7就是正确顺序的啦!