pandas dataframes,.ix

时间:2013-10-05 00:56:22

标签: python pandas dataframe

df是一系列日期内股票价格的数据框。 df.shape是(367,1709)。行是日期的时间戳,列是股票代码。时间戳的范围为2012年4月2日至2013年9月27日。

我按如下方式运行for循环:

 ldt_timestamps=df.index
 symbols = df.columns
 for sym in symbols:
    for i in range(1, len(ldt_timestamps)) # looping from 2nd row to calculate ratio of today's price and yesterdays price
        f_symprice_today = df[sym].ix[ldt_timestamps[i]]

问题是循环遇到错误'KeyError- Timestamp:2012-04-03 00:00:00。我跟踪错误并发现当循环到达特定的股票代码列 - “M50”时会发生错误。这是第891栏

我尝试了以下内容:

  1. 检查是否是导致错误的时间戳,我检查了df ['M50']。ix [ldt_timestamps [200]]。错误是相同的(虽然时间戳不同)。

  2. 检查导致错误的股票代码。我尝试过使用其他符号。没错。即使我尝试在“M50”之后出现符号,也没有错误。所以问题就是符号。但这些符号取自数据框的列。

  3. 为了进一步理解错误,我尝试了df ['M50']。shape,它返回(0,1709)。当我尝试使用其他股票代码时,这是有趣的becuae,形状总是(367,)

  4. df.T.Head显示以下内容:

      <class 'pandas.core.frame.DataFrame'>
      Index: 5 entries, 20MICRONS to AANJANEYA
      Columns: 367 entries, 2012-04-02 00:00:00 to 2013-09-27 00:00:00
      dtypes: float64(367)
    

    写入csv的d​​f如下所示:

    date      20MICRONS 3IINFOTECH  3MINDIA A2ZMES  AANJANEYA   AARTIDRUGS
    4/2/2012    83.85   16.15   3761.25 116.75  560.7   104.4
    4/3/2012    83.75   16.1    3997.65 125.95  553 103
    4/4/2012    81.75   16.05   3992.3  122.55  552.25  104.55
    4/9/2012    81.55   15.7    4176.45 118.05  522.2   103.65
    4/10/2012   83.05   15.75   4234.1  118.85  523.8   105.5
    4/11/2012   81.75   15.85   4238.6  115.95  510.9   108.2
    4/12/2012   81.6    15.9    4371.75 114.5   529 109.9
    4/13/2012   81.85   15.5    4403.4  112.55  514.7   112.1
    4/16/2012   80.7    15.5    4449.65 112.95  509.9   111.9
    

    真的在我的智慧结束这个。请求帮助,了解如何仅为一个股票代码找出导致此错误的原因。

0 个答案:

没有答案