2012-07-30 45 views
11

Tôi có hai largish (đoạn cung cấp) gấu trúc DateFrame s với số ngày bất bình đẳng như các chỉ số mà tôi muốn concat thành một:concat gấu trúc DataFrame cùng chỉ số chuỗi thời gian

  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 

Vấn đề là, nếu tôi chạy này:

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

các DateFrame sau được sản xuất:

        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 

Hiện ai có bất kỳ ý tưởng tại sao điều này có thể là trường hợp?

Trên một điểm khác: có thư viện python nào xung quanh đó lấy dữ liệu từ yahoo và bình thường hóa không?

Chúc mừng.

EDIT: Để tham khảo:

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

phiên bản gấu trúc của bạn là gì? Điều này trông giống như một lỗi đã được sửa trong 0.8.1 –

+0

Vâng, tôi cũng đã có suy nghĩ đó. Khi tôi lần đầu tiên gặp vấn đề này, tôi đã chạy 0.8.0 nhưng hiện đang chạy 0.8.1 và kết quả tương tự cũng xảy ra ... –

+1

Bạn có thể gửi e-mail cho tôi các phiên bản của các DataFrames đó không (wesmckinn AT gmail)? Tôi không thể tái tạo vấn đề ở đây. Ngoài ra, hãy kiểm tra xem bạn đang sử dụng hoặc là NumPy 1.6.1 hoặc phiên bản phát triển sau ngày 6/5/2012. Có lẽ tốt nhất để chuyển cuộc thảo luận này sang GitHub –

Trả lời

7

Có thể đọc dữ liệu với gấu trúc và nối nó.

đầu tiên nhập khẩu các dữ liệu

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 

Thân nối nó:

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

Cố gắng tham gia vào bên ngoài.

Khi tôi làm việc với một số cổ phiếu, tôi thường có một khung có tiêu đề "mở cao, thấp, đóng, v.v ..." với cột làm biểu ngữ. Nếu bạn muốn có một cấu trúc dữ liệu, tôi sẽ sử dụng Panels cho việc này.

cho dữ liệu của Yahoo, bạn có thể sử dụng gấu trúc:

import pandas.io.data as data 
spy = data.DataReader("SPY","yahoo","1991/1/1") 
Các vấn đề liên quan