Pandas Dataframe KeyError:“标签[2019-01-14]不在[index]中”'

时间:2019-01-15 01:44:20

标签: python pandas datetime indexing keyerror

所以我发誓我已遇到一个错误,但我希望有人能证明我错了。

我可以产生两种不同格式的Pandas DataFrame,我无法使用的是首选格式,其次是第二种。第一种格式如下:

     1. open          ...           8. split coefficient
date                         ...                               
1998-01-02   129.63          ...                            1.0
1998-01-05   131.25          ...                            1.0
1998-01-06   129.75          ...                            1.0
1998-01-07   129.88          ...                            1.0
1998-01-08   128.63          ...                            1.0
1998-01-09   130.06          ...                            1.0
1998-01-12   124.62          ...                            1.0
1998-01-13   129.50          ...                            1.0
1998-01-14   132.13          ...                            1.0
[5292 rows x 8 columns]

我正在尝试选择日期最接近指定日期的行/条目。我使用以下功能进行此操作:

 def nearest(items, pivot):
     nearest_date = min(items, key=lambda x: abs(dt.strptime(x, '%Y-%m-%d') - dt.strptime(pivot, '%Y-%m-%d')))
     return nearest_date 

然后从对应于该条目的第四个cloumn中正确获取一个值:

 market = (data.loc[nearest(data.index.get_values(), date)]['4. close'])

但是,在第二种格式下,我的DataFrame看起来像这样(使用基于整数的索引):

            date          ...           8. split coefficient
0     1998-01-02          ...                            1.0
1     1998-01-05          ...                            1.0
2     1998-01-06          ...                            1.0
3     1998-01-07          ...                            1.0
4     1998-01-08          ...                            1.0
5     1998-01-09          ...                            1.0
6     1998-01-12          ...                            1.0
7     1998-01-13          ...                            1.0
8     1998-01-14          ...                            1.0
[5292 rows x 9 columns]

因此,我相应地调整了“市场”公式:

market = (data.loc[nearest(data['date'].values, date)]['4. close'])

并得到此错误:

KeyError: 'the label [2019-01-14] is not in the [index]'

我已经尝试过各种疯狂的事情,包括将date列转换为pd.datetime,但是从未遇到错误。您看到的是对我有意义的,这就是为什么这是本文中尝试的解决方案的原因。对可能是什么问题有任何想法吗?

1 个答案:

答案 0 :(得分:0)

然后向后reset_index

data.reset_index(inplace=True)

正在做

market = (data.loc[nearest(data['date'].values, date)]['4. close'])