dataframe每一行是dict或者list的嵌套,展开的方式

掘金成分股的原始数据格式

    constituents                                                    trade_date
{'SHSE.600527': 0.009999999776482582, 'SHSE.600461': 0.019999999552965164,···}     2017-07-31 00:00:00
{'SHSE.603966': 0.009999999776482582, 'SHSE.603960': 0.009999999776482582,···}     2017-08-31 00:00:00
···

我想要的数据格式

              stockcode
2016-01-29  SZSE.300002
2016-01-29  SZSE.300003
2016-01-29  SZSE.000568
2016-01-29  SZSE.000623
2016-01-29  SHSE.600398
                ...
2020-11-30  SHSE.600297
2020-11-30  SHSE.600352
2020-11-30  SHSE.600299
2020-11-30  SHSE.600406
2020-11-30  SHSE.600362

[17700 rows x 1 columns]

弄了好一会,记录一下,方便下次用到

    stock300 = get_history_constituents(index='SHSE.000300', start_date='2016-01-01', end_date='2020-12-01')#[0]['constituents']
    df300=pd.DataFrame(stock300)
    df_300=df300.constituents.apply(lambda x:list(x.keys()))#.iloc[:,1]
    df_300.index=df300.trade_date
    #列表展开 然后每个列表再做成df,
    list300=df_300.values.flatten()
    indexs=list(map(lambda x:x.date(),df_300.index))
    #时间索引为成分股数量的长度
    listdf_300=list(map(lambda x,y:pd.DataFrame(x,index=[y]*len(x),columns=['stockcode']),list300,indexs))
    #list嵌套df的合并
    df_=reduce(lambda x,y:pd.concat([x,y]),listdf_300)
    print(df_)

    df_.to_csv('stock300.csv')#,index=False

更新下,其实只需要两个函数就可以更方便实现

def using_repeat(x):
    return pd.DataFrame({"stockcode" :np.repeat(x.stockcode,len(trade_days)),
                  'classname':np.repeat(x.classname,len(trade_days)),
                  "tradedate" :trade_days})

numpy包还是用的不够熟练。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车忻青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值