Ошибка ключа: 0 с кадром данных, отфильтрованным от другого кадра данных - PullRequest
0 голосов
/ 18 октября 2018

У меня есть кадр данных, отфильтрованный от другого кадра данных.Очевидно, они имеют одинаковые столбцы и значения, но когда я применяю цикл к отфильтрованному, я получаю ошибку ключа: 0, в то время как в исходном это не проблема.Вот два кадра данных:

Оригинальный это:

          ISIN         ISSUE DATE    MATURITY       PRICE   
     0  AR121489 Corp  29/03/2019    29/09/2019    97.314000
     1  AR714081 Corp  29/06/2019    29/12/2019    97.014500
     2  AT452141 Corp  29/12/2019    29/06/2020    92.959000
     3  QJ100923 Corp  29/03/2020    29/09/2020    96.696222

С этим, прочитав его из CSV, я преобразую данные для его фильтрации:

df['ISSUE DATE mod'] = df['ISSUE DATE'].apply(lambda x: dt.datetime.strptime(x,'%d/%m/%Y'))
df['MATURITY mod'] = df['MATURITY'].apply(lambda x: dt.datetime.strptime(x,'%d/%m/%Y'))
df['ISSUE DATE mod'] = df['ISSUE DATE mod'].astype('datetime64[ns]').copy()
df['MATURITY mod'] =df['MATURITY mod'].astype('datetime64[ns]').copy()

И затем я фильтрую кадр данных, чтобы получить этот:

fval = dt.date(2019,7,29)
np.datetime64(fecha_valoracion)
df2= df.loc[(tabla_info_bonos['ISSUE DATE mod'] < fval) & (df['MATURITY mod'] > fval)]

И я получаю этот кадр данных:

     ISIN         ISSUE DATE  MATURITY     ISSUE DATE mod   MATURITY mod
0  AR121489 Corp  29/03/2019  29/09/2019     2019-03-29        2019-09-29
1  AR714081 Corp  29/06/2019  29/12/2019     2019-06-29        2019-12-29

Затем, если я сделаю следующую операцию с исходным кадром данныхэто работает, но не с отфильтрованным:

maturity = []
for i in range(len(df2['MATURITY'])):
    maturities = pd.to_datetime(df2['MATURITY'][i]).date()
    maturity.append(maturities)
OUTPUT = KeyError: 0

Я подозреваю, что проблема в фильтрующей части, но я не знаю, как ее исправить.Любая помощь с этим будет идеальной, и я буду очень благодарен

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Сброс индекса фрейма данных.Отфильтрованный фрейм данных имеет индекс, соответствующий индексу в оригинальном фрейме данных.

df2 = df2.reset_index (drop = True)

0 голосов
/ 18 октября 2018

Я чувствую, что в конце есть проблема с вашим циклом for

maturity = []
for i in range(len(df2['MATURITY'])):
    maturities = pd.to_datetime(df2['MATURITY'][i]).date()
    maturity.append(maturities)

вместо приведенного выше кода, не могли бы вы попробовать что-то вроде ниже

maturity = []
for item in df2['MATURITY']:
    maturity.append(pd.to_datetime(item).date())

илиВы также можете использовать понимание списка

maturity = [pd.to_datetime(item).date()for item in df2['MATURITY']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...