ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-pandas.concat()不填充列

2019-11-11 14:55:18  阅读:230  来源: 互联网

标签:concat pandas python-3-x python numpy


我正在尝试如下创建虚拟数据:

import numpy as np
import pandas as pd    

def dummy_historical(seclist, dates, startvalues):

    dfHist = pd.DataFrame(0, index=[0], columns=seclist)

    for sec in seclist:

        # (works fine)
        svalue   = startvalues[sec].max()

        # this creates a random sequency of 84 rows and 1 column (works fine)
        dfRandom = pd.DataFrame(np.random.randint(svalue-10,svalue+10, size=(dates.size, 1 )), index=dates, columns=[sec])

        # does not work
        dfHist[sec] = pd.concat([ dfHist[sec] , dfRandom ])

return dfHist

当我打印dfHist时,它仅显示第一行(与启动时一样).因此,什么都没有填补.

这是数据示例:

seclist = ['AAPL', 'GOOGL']

# use any number for startvalues

dates = DatetimeIndex(['2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
                   '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12',
                   '2017-01-13', '2017-01-14', '2017-01-15', '2017-01-16',
                   '2017-01-17', '2017-01-18', '2017-01-19', '2017-01-20',
                   '2017-01-21', '2017-01-22', '2017-01-23', '2017-01-24',
                   '2017-01-25', '2017-01-26', '2017-01-27', '2017-01-28',
                   '2017-01-29', '2017-01-30', '2017-01-31', '2017-02-01',
                   '2017-02-02', '2017-02-03', '2017-02-04', '2017-02-05',
                   '2017-02-06', '2017-02-07', '2017-02-08', '2017-02-09',
                   '2017-02-10', '2017-02-11', '2017-02-12', '2017-02-13',
                   '2017-02-14', '2017-02-15', '2017-02-16', '2017-02-17',
                   '2017-02-18', '2017-02-19', '2017-02-20', '2017-02-21',
                   '2017-02-22', '2017-02-23', '2017-02-24', '2017-02-25',
                   '2017-02-26', '2017-02-27', '2017-02-28', '2017-03-01',
                   '2017-03-02', '2017-03-03', '2017-03-04', '2017-03-05',
                   '2017-03-06', '2017-03-07', '2017-03-08', '2017-03-09',
                   '2017-03-10', '2017-03-11', '2017-03-12', '2017-03-13',
                   '2017-03-14', '2017-03-15', '2017-03-16', '2017-03-17',
                   '2017-03-18', '2017-03-19', '2017-03-20', '2017-03-21',
                   '2017-03-22', '2017-03-23', '2017-03-24', '2017-03-25',
                   '2017-03-26', '2017-03-27', '2017-03-28', '2017-03-29'],
                  dtype='datetime64[ns]', freq='D')

解决方法:

如果要串联列,则需要传递axis = 1来串联.另外,您不需要以开头的数据来初始化数据帧(除非您希望值为0):

def dummy_historical(seclist, dates, startvalues):

    dfHist = pd.DataFrame()

    for sec in seclist:
        svalue   = startvalues[sec].max()   
        dfRandom = pd.DataFrame(np.random.randint(svalue-10,svalue+10, size=(dates.size, 1 )), index=dates, columns=[sec])
        dfHist = pd.concat([ dfHist , dfRandom ], axis=1)

    return dfHist

您甚至可以以更简洁的方式编写代码,避免出现以下类似问题:

def generate(sec):
    svalue = startvalues[sec].max()
    return np.random.randint(svalue-10,svalue+10, size=dates.size)

dfHist = pd.DataFrame({sec: generate(sec) for sec in seclist}, index=dates)

标签:concat,pandas,python-3-x,python,numpy
来源: https://codeday.me/bug/20191111/2020556.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有