Pandas.concat () not populating columns

I am trying to create dummy data like this:

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

      

When I type dfHist

, it only shows the first line (as it does on startup). Thus, nothing was filled.


Here's some sample data:

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')

      

+3


source to share


1 answer


You need to pass axis=1

in concat

if you want to concatenate columns. Also, you don't need to initialize your dataframe with data at the beginning (except that you want to be 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

      



You can even write in a more concise way, avoiding concat

like:

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)

      

+3


source







All Articles