Игнорировать предупреждение Pandas KeyError: значение не в индексе - PullRequest
0 голосов
/ 21 июня 2019

Есть ли способ подавить ошибку панд KeyError: '[x]' нет в индексе?Например, если у меня есть фрейм данных со столбцами ABC и я вызываю df [['A', 'B', 'C', 'D']], можно ли просто вернуть A, B, Cи игнорировать D, если он не существует?

Пример кода

import pandas as pd
import numpy as np

a = np.matrix('[1,4,5];[1,2,2];[9,7,5]')

df = pd.DataFrame(a,columns=['A','B','C'])

df[['A','B','C','D']]

Вот сообщение об ошибке

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 2133, in __getitem__
    return self._getitem_array(key)
  File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 2177, in _getitem_array
    indexer = self.loc._convert_to_indexer(key, axis=1)
  File "/usr/lib/python3/dist-packages/pandas/core/indexing.py", line 1269, in _convert_to_indexer
    .format(mask=objarr[mask]))
KeyError: "['D'] not in index"

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Или, если вы определенно хотите D, вы можете reindex() на axis=1:

l=['A','B','C','D']
df.reindex(l,axis=1)

   A  B  C   D
0  1  4  5 NaN
1  1  2  2 NaN
2  9  7  5 NaN
1 голос
/ 21 июня 2019

Используйте пересечение столбцов с желаемым списком при выборе столбцов. Вы получаете все столбцы, когда они существуют, и только подмножество, которое существует с меньшим количеством столбцов, без каких-либо ошибок.

l = ['A', 'B', 'C', 'D']
df[df.columns.intersection(l)]

   A  B  C
0  1  4  5
1  1  2  2
2  9  7  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...