Pandas Dataframe KeyError: «метка [2019-01-14] отсутствует в [index]» - PullRequest
0 голосов
/ 15 января 2019

Так что я клянусь, что столкнулся с ошибкой, но я надеюсь, что кто-то может доказать, что я неправ.

Я могу создать 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, но никогда не получал ошибок. То, что вы видите, это то, что имеет смысл для меня, и именно поэтому это попытка найти решение в этом посте. Есть идеи, в чем может быть проблема?

1 Ответ

0 голосов
/ 15 января 2019

Тогда просто reset_index назад

data.reset_index(inplace=True)

И делает

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