Поиск по списку указателей в пандах - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь следующий код:

In [29]: indexes_to_search = [1, 3, 4]

In [30]: df = pd.DataFrame([(1, 2, 3), (4, 5, 6), (7, 8, 9)], columns=["id", "val1", "val2"]).set_index("id")

In [31]: df
Out[31]: 
    val1  val2
id            
1      2     3
4      5     6
7      8     9

In [32]: df.loc[indexes_to_search]
Out[32]: 
    val1  val2
id            
1    2.0   3.0
3    NaN   NaN
4    5.0   6.0

Почему-то в результате был добавлен индекс 3 со значениями NaN в столбцах.В моей реальной проблеме indexes_to_search может содержать неиндексные значения (в моем примере строка 3).Я хочу избежать добавления дополнительной строки для удаления значений nan, потому что мой DataFrame очень большой.Итак, вопрос в том, как я могу искать по списку индексов, например .loc без строк NaN.Я бы ожидал:

    val1  val2
id            
1    2.0   3.0
4    5.0   6.0

1 Ответ

0 голосов
/ 29 мая 2018

Нужно Index.intersection:

df1 = df.loc[df.index.intersection(indexes_to_search)]
print (df1)
   val1  val2
1     2     3
4     5     6

Или использовать пересечение set s:

df1 = df.loc[set(df.index).intersection(indexes_to_search)]
print (df1)
    val1  val2
id            
1      2     3
4      5     6

В моей версии панды 0.22.0 получить предупреждение:

df1 = df.loc[indexes_to_search]
print (df1)

    val1  val2
id            
1    2.0   3.0
2    NaN   NaN
3    NaN   NaN

FutureWarning:

Передача лайк-листов в .loc или [] с любой отсутствующей меткой вызовет KeyError в будущем, вы можетеиспользуйте .reindex () в качестве альтернативы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...