当前位置:首页>股票

股票行情excel(Python Pandas 股票数据分析)

日期:2023-11-15

来源:玫瑰财经网

浏览:

    Python Pandas 股票数据分析

    Python Pandas 股票数据分析

    实现的功能是计算表中所有股票每日的未来(历史)20天的日涨跌幅(CHG_RATIO列)连乘、求和、求平均


    Python Pandas 股票数据分析

    数据库里的日期是交易日,实现成未来20个交易日的数据

    方法一:根据条件遍历所有数据(缺点慢)

    #读入数据import pandas as pdpd.set_option('display.float_format', lambda x: '%.2f' % x) # 2位小数df=pd.read_excel('股票行情(1).xlsx', parse_dates=["TD_DATE"])df=df.drop('Unnamed: 0',axis=1)df


    Python Pandas 股票数据分析

    根据每一行日期向后遍历30天,如果符合条件就计算连乘并写入对应行

    lst1=[]for i in range(len(df)):    print(df.loc[i,'SEC_SHORT_NAME_CN'],df.loc[i,'TD_DATE'])    name1=df.loc[i,'SEC_SHORT_NAME_CN']    a=1    k=1    lst=[]    dict={}    while k<29:                for j in range(len(df)):            if name1==df.loc[j,'SEC_SHORT_NAME_CN'] and df.loc[j,'TD_DATE']==df.loc[i,'TD_DATE']+pd.Timedelta(days=k):                #print(df.loc[j,'TD_DATE'])                #print('a',a,'b',df.loc[j,'CHG_RATIO'])                a*=df.loc[j,'CHG_RATIO']                lst.append(df.loc[j,'CHG_RATIO'])                               k+=1        print(lst)           df.loc[i,'new']=a        lst1.append(a)print(lst)print(lst1)

    方法二:根据股票名称分组排序计算乘积

    import pandas as pdpd.set_option('display.float_format', lambda x: '%.2f' % x) # 2位小数#将TD_DATE设置为日期类型df=pd.read_excel('股票行情.xlsx', parse_dates=["TD_DATE"])#True 升序(取未来数据),False降序(取历史数据)shengxu=Truedf.sort_values(by=["SEC_SHORT_NAME_CN",'TD_DATE'],ascending=shengxu,inplace=True,)#删除没用的列df=df.drop(['Unnamed: 0','Unnamed: 10','Unnamed: 11'],axis=1)#复制模板(空表)moban=df.copy()moban.drop(moban.index,inplace=True)df

    对数据表按股票名"SEC_SHORT_NAME_CN"分组

    df.groupby("SEC_SHORT_NAME_CN")

    然后重置分组后的数据表

    group.reset_index(inplace=True)

    再进行排序切片取累计乘积最后一位

    使用iat()-获取最后一个元素

    cumsum(): 依次计算前1, 2, …, n 个数的和

    cumprod(): 依次计算前1, 2, …, n 个数的乘积

    cummax(): 依次找到前1, 2, …, n 个数的最大值

    cummin(): 依次找到前1, 2, …, n 个数的最小值

    group.loc[i,"new"]=group.loc[i:a-1 ,"CHG_RATIO"].cumprod().iat[-1]
    import numpy as npimport pandas as pd# 1. 累计和与累计乘积x = pd.Series(range(1, 10))print("累计和:n", x.cumsum())print("累计乘积:n", x.cumprod())

    核心代码

    #遍历分组数据表for key,group in df.groupby("SEC_SHORT_NAME_CN"):#打印分组名称    #print(type(key))#打印分组表    #print(type(group))#重置表index    group.reset_index(inplace=True)    a=20#设置天数   #遍历分组后数据表    for i in range(len(group)):    #选取等于20天的数据        if len(group.loc[i:a-1 ,"CHG_RATIO"]) ==20:        #切片选取对应日期后20天数据计算乘积并取最后一位书写入表中            group.loc[i,"new"]=group.loc[i:a-1 ,"CHG_RATIO"].cumprod().iat[-1]            #求和            group.loc[i,"qiuhe"]=group.loc[i:a-1 ,"CHG_RATIO"].sum()            #求平均            group.loc[i,"pingjun"]=group.loc[i:a-1 ,"CHG_RATIO"].mean()        #print(i,a,len(group.loc[i:a-1 ,"CHG_RATIO"]))        a+=1#对处理后的表格进行合并    moban=pd.concat([moban,group])#保存处理后的数据表moban.to_csv("new.csv")

    原来使用第一种方法,数据越多越慢,经过多次分析决定更改算法使用第二种方法效率提高很多!

相关文章阅读

Copyright (c) 2022 玫瑰财经网 版权所有

备案号:冀ICP备17019481号

玫瑰财经网发布此信息的目的在于传播更多信息,与本站立场无关。玫瑰财经网不保证该信息(包含但不限于文字、视频、音频、数据及图表)全部或者部分内容的准确性、真实性、完整性、有效性、及时性、原创性等。
相关信息并未经过本网站证实,不对您构成任何投资建议,据此操作,风险自担。