Так что я клянусь, что столкнулся с ошибкой, но я надеюсь, что кто-то может доказать, что я неправ.
Я могу создать DataFrame Pandas в двух разных форматах, тот, который я не могу заставить работать, является предпочтительным, упомянутый второй. Первый формат выглядит следующим образом:
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
И затем правильно получить значение из четвертого столбца, соответствующего этой записи:
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]'
Я перепробовал все виды сумасшедших вещей, включая преобразование столбца даты в pd.datetime, но никогда не получал ошибок. То, что вы видите, это то, что имеет смысл для меня, и именно поэтому это попытка найти решение в этом посте. Есть идеи, в чем может быть проблема?