2012-07-30 29 views
11

tengo dos bastante grande (fragmentos de siempre) pandas DateFrame s con fechas desiguales como los índices que deseo concat en una sola:concat trama de datos pandas a lo largo de los índices de series temporales

  NAB.AX         CBA.AX 
      Close Volume       Close Volume 
Date         Date 
2009-06-05 36.51 4962900    2009-06-08 21.95   0 
2009-06-04 36.79 5528800    2009-06-05 21.95 8917000 
2009-06-03 36.80 5116500    2009-06-04 22.21 18723600 
2009-06-02 36.33 5303700    2009-06-03 23.11 11643800 
2009-06-01 36.16 5625500    2009-06-02 22.80 14249900 
2009-05-29 35.14 13038600 --AND-- 2009-06-01 22.52 11687200 
2009-05-28 33.95 7917600    2009-05-29 22.02 22350700 
2009-05-27 35.13 4701100    2009-05-28 21.63 9679800 
2009-05-26 35.45 4572700    2009-05-27 21.74 9338200 
2009-05-25 34.80 3652500    2009-05-26 21.64 8502900 

El problema es que si me quedo esto:

keys = ['CBA.AX','NAB.AX'] 
mv = pandas.concat([data['CBA.AX'][650:660],data['NAB.AX'][650:660]], axis=1, keys=stocks,) 

la siguiente DateFrame se produce:

        CBA.AX   NAB.AX   
           Close Volume Close Volume 
Date              
2200-08-16 04:24:21.460041  NaN  NaN  NaN  NaN 
2203-05-13 04:24:21.460041  NaN  NaN  NaN  NaN 
2206-02-06 04:24:21.460041  NaN  NaN  NaN  NaN 
2208-11-02 04:24:21.460041  NaN  NaN  NaN  NaN 
2211-07-30 04:24:21.460041  NaN  NaN  NaN  NaN 
2219-10-16 04:24:21.460041  NaN  NaN  NaN  NaN 
2222-07-12 04:24:21.460041  NaN  NaN  NaN  NaN 
2225-04-07 04:24:21.460041  NaN  NaN  NaN  NaN 
2228-01-02 04:24:21.460041  NaN  NaN  NaN  NaN 
2230-09-28 04:24:21.460041  NaN  NaN  NaN  NaN 
2238-12-15 04:24:21.460041  NaN  NaN  NaN  NaN 

¿alguien ¿Tienes alguna idea de por qué este podría ser el caso?

En otro punto: ¿hay alguna biblioteca de Python alrededor que extraiga datos de yahoo y lo normalice?

Saludos.

EDIT: Como referencia:

data = { 
'CBA.AX': <class 'pandas.core.frame.DataFrame'> 
    DatetimeIndex: 2313 entries, 2011-12-29 00:00:00 to 2003-01-01 00:00:00 
    Data columns: 
     Close  2313 non-null values 
     Volume 2313 non-null values 
    dtypes: float64(1), int64(1), 

'NAB.AX': <class 'pandas.core.frame.DataFrame'> 
    DatetimeIndex: 2329 entries, 2011-12-29 00:00:00 to 2003-01-01 00:00:00 
    Data columns: 
     Close  2329 non-null values 
     Volume 2329 non-null values 
    dtypes: float64(1), int64(1) 
} 
+1

¿Cuál es su versión de los pandas? Esto parece un error que se solucionó en 0.8.1 –

+0

Sí, también tuve ese pensamiento. Cuando me enteré por primera vez de este problema, estaba ejecutando 0.8.0 pero ahora estoy ejecutando 0.8.1 y ocurre el mismo resultado ... –

+1

¿Pueden enviarme un correo electrónico las versiones en escabeche de esos DataFrames (wesmckinn AT gmail)? No puedo reproducir el problema aquí. También compruebe que está utilizando ya sea NumPy 1.6.1 o una versión de desarrollo después del 5/6/2012. Tal vez sea mejor mover esta discusión a GitHub –

Respuesta

7

Es posible leer los datos con los pandas y para concatenar ella.

Primera importar los datos

In [449]: import pandas.io.data as web 

In [450]: nab = web.get_data_yahoo('NAB.AX', start='2009-05-25', 
            end='2009-06-05')[['Close', 'Volume']] 

In [451]: cba = web.get_data_yahoo('CBA.AX', start='2009-05-26', 
            end='2009-06-08')[['Close', 'Volume']] 

In [453]: nab 
Out[453]: 
      Close Volume 
Date      
2009-05-25 21.15 9685100 
2009-05-26 21.64 8541900 
2009-05-27 21.74 9042900 
2009-05-28 21.63 9701000 
2009-05-29 22.02 14665700 
2009-06-01 22.52 6782000 
2009-06-02 22.80 10473400 
2009-06-03 23.11 9931400 
2009-06-04 22.21 17869000 
2009-06-05 21.95 8214300 

In [454]: cba 
Out[454]: 
      Close Volume 
Date      
2009-05-26 35.45 4529600 
2009-05-27 35.13 4521500 
2009-05-28 33.95 7945400 
2009-05-29 35.14 12548500 
2009-06-01 36.16 4509400 
2009-06-02 36.33 4304900 
2009-06-03 36.80 4845400 
2009-06-04 36.79 4592300 
2009-06-05 36.51 4417500 
2009-06-08 36.51   0 

Que concatenarlo:

In [455]: keys = ['CBA.AX','NAB.AX'] 

In [456]: pd.concat([cba, nab], axis=1, keys=keys) 
Out[456]: 
      CBA.AX   NAB.AX   
      Close Volume Close Volume 
Date           
2009-05-25  NaN  NaN 21.15 9685100 
2009-05-26 35.45 4529600 21.64 8541900 
2009-05-27 35.13 4521500 21.74 9042900 
2009-05-28 33.95 7945400 21.63 9701000 
2009-05-29 35.14 12548500 22.02 14665700 
2009-06-01 36.16 4509400 22.52 6782000 
2009-06-02 36.33 4304900 22.80 10473400 
2009-06-03 36.80 4845400 23.11 9931400 
2009-06-04 36.79 4592300 22.21 17869000 
2009-06-05 36.51 4417500 21.95 8214300 
2009-06-08 36.51   0  NaN  NaN 
1

intenta unir el exterior.

Cuando estoy trabajando con varias acciones, generalmente tengo un marco titulado "abrir alto, bajo, cerrar, etc." con una columna como ticker. Si quieres una estructura de datos, usaría paneles para esto.

para los datos de Yahoo, puede utilizar los pandas:

import pandas.io.data as data 
spy = data.DataReader("SPY","yahoo","1991/1/1") 
Cuestiones relacionadas