所以我发誓我已遇到一个错误,但我希望有人能证明我错了。
我可以产生两种不同格式的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,但是从未遇到错误。您看到的是对我有意义的,这就是为什么这是本文中尝试的解决方案的原因。对可能是什么问题有任何想法吗?
答案 0 :(得分:0)
然后向后reset_index
data.reset_index(inplace=True)
正在做
market = (data.loc[nearest(data['date'].values, date)]['4. close'])