【问题标题】:concat pandas DataFrame along timeseries indexes沿时间序列索引连接 pandas DataFrame
【发布时间】:2012-07-27 17:22:05
【问题描述】:

我有两个较大的(提供 sn-ps)pandas DateFrames,它们的日期不相等,我希望将它们合并为一个索引:

           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

问题是,如果我运行这个:

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

生成以下 DateFrame:

                                 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

有人知道为什么会这样吗?

另一方面:是否有任何 python 库可以从雅虎中提取数据并对其进行规范化?

干杯。

编辑:供参考:

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

【问题讨论】:

  • 你的熊猫版本是什么?这看起来像是 0.8.1 中修复的错误
  • 是的,我也有这个想法。当我第一次遇到这个问题时,我运行的是 0.8.0,但现在运行的是 0.8.1,并且出现了相同的结果......
  • 你能给我发电子邮件给我那些数据帧的腌制版本吗(wesmckinn AT gmail)?我无法在这里重现该问题。还要检查您使用的是 NumPy 1.6.1 还是 2012 年 6 月 5 日之后的开发版本。也许最好将此讨论移至 GitHub
  • 不确定你的concat 行会做什么 mv = pandas.concat([data['CBA.AX'][650:660],data['NAB.AX'][650: 660]], axis=1, keys=stocks,) 1. 您似乎有一个数据框data 存储您的数据,但您提到您有两个数据框。 2. stocks 没有定义,而且你添加了一个逗号,所以key 将是一个tuple

标签: python numpy scipy pandas yahoo-finance


【解决方案1】:

尝试加入外部。

当我处理一些股票时,我通常会有一个标题为“开盘高点、低点、收盘价等”的框架,并以列作为代码。如果您想要一种数据结构,我会为此使用 Panels。

对于 Yahoo 数据,您可以使用 pandas:

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

【讨论】:

    【解决方案2】:

    可以使用 pandas 读取数据并将其连接起来。

    先导入数据

    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
    

    比连接它:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 2013-11-09
      • 2013-12-12
      • 2021-06-20
      • 2018-06-18
      • 2023-01-13
      • 2018-08-28
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多