7.7 对股票交易数据表中停牌数据利用最近交易日数据进行填充。关于股票某个交易日是否停牌,可与交易日历表进行关联查询获得。
[知识点及要求]基于基准日期的股票交易数据填充
示例代码如下:
# -*- coding: utf-8 -*-
#1.数据获取
import pandas as pd
d=pd.read_excel('交易日历表.xlsx')
d1=pd.read_excel('股票交易数据表.xlsx')
S=d1.iloc[:,0].unique()
data=pd.DataFrame({})
l0=[]
for i in S:
a=d1.iloc[d1.iloc[:,0].values==i]
a1=pd.merge(d,a,left_on='Clddt',right_on='Trddt',how='left')
a2=a1.fillna(-10000) #用-10000填充空值
l0.append(a2)
#分别提取出l0中的每个股票代码对应数据
l1=l0[0]
l2=l0[1]
l3=l0[2]
l4=l0[3]
l5=l0[4]
l6=l0[5]
#将各个股票代码为-10000的值填充为对应的股票代码
for i in range(len(l1)):
if l1.iloc[i,3]==-10000:
l1.iloc[i,3]=S[0]
if l2.iloc[i,3]==-10000:
l2.iloc[i,3]=S[1]
if l3.iloc[i,3]==-10000:
l3.iloc[i,3]=S[2]
if l4.iloc[i,3]==-10000:
l4.iloc[i,3]=S[3]
if l5.iloc[i,3]==-10000:
l5.iloc[i,3]=S[4]
if l6.iloc[i,3]==-10000:
l6.iloc[i,3]=S[5]
L=pd.concat([l1,l2,l3,l4,l5,l6],axis=0)
for j in range(1,len(L)):
if L.iloc[j,5]==-10000:
L.iloc[j,5]=L.iloc[j-1,5]
data=pd.concat([data,L],axis=0)
data=data.iloc[:,[0,1,2,3,5]]
运行结果如下图:
更多内容请见网易云课堂Python大数据学习吧:
https://study.163.com/provider/480000002230206/index.htm?share=2&shareId=480000002230206