Ошибка, когда строки .lo c () со списком дат в pandas - PullRequest
0 голосов
/ 09 июля 2020

У меня есть следующий код:

import pandas as pd
from pandas_datareader import data as web

df = web.DataReader('^GSPC', 'yahoo')
df['pct'] = df['Close'].pct_change()

dates_list = df.index[df['pct'].gt(0.002)]

df2 = web.DataReader('^GDAXI', 'yahoo')
df2['pct2'] = df2['Close'].pct_change()

Я пытался запустить это:

df2.loc[dates_list, 'pct2']

Но я продолжаю получать эту ошибку:

KeyError: 'Passing list-likes to .loc or [] with any missing labels is no longer supported,

Я предполагаю, что это связано с отсутствием данных для дат в dates_list. Чтобы решить эту проблему:

    idx1 = df.index
    idx2 = df2.index
    missing = idx2.difference(idx1)
    df.drop(missing, inplace = True)
    df2.drop(missing, inplace = True)

Однако я все еще получаю ту же ошибку. Я не понимаю, почему это так.

1 Ответ

1 голос
/ 09 июля 2020

Обратите внимание, что date_list был создан из df , поэтому он включает некоторые даты, присутствующие в индексе там df ).

Затем вы читаете df2 и пытаетесь получить pct2 из строк только на эти даты.

Но есть вероятность, что индекс в df2 не содержит ли все даты, указанные в date_list . И именно в этом причина вашего исключения.

Чтобы этого избежать, извлекайте только строки с датами присутствуют в индексе. Чтобы искать только такие «разрешенные» (сузить определение строк), вы должны передать:

dates_list[dates_list.isin(df2.index)]

Запустите это самостоятельно, и вы увидите «разрешенные» даты (некоторые даты будут удалены).

Поэтому измените указание о нарушении на:

df2.loc[dates_list[dates_list.isin(df2.index)], 'pct']
...