Выберите строки Pandas на основе индекса списка

107

У меня есть dataframe df:

   20060930  10.103       NaN     10.103   7.981
   20061231  15.915       NaN     15.915  12.686
   20070331   3.196       NaN      3.196   2.710
   20070630   7.907       NaN      7.907   6.459

Затем я хочу выбрать строки с определенными порядковыми номерами, которые указаны в списке, предположим, что здесь [1,3], а затем влево:

   20061231  15.915       NaN     15.915  12.686
   20070630   7.907       NaN      7.907   6.459

Как или какая функция может это сделать?

user2806761
источник

Ответы:

132
List = [1, 3]
df.ix[List]

должен сделать свое дело! Когда я индексирую с помощью фреймов данных, я всегда использую метод .ix (). Это намного проще и гибче ...

ОБНОВЛЕНИЕ Это больше не приемлемый метод для индексации. Этот ixметод устарел. Используется .ilocдля индексации .locна основе целых чисел и для индексации на основе меток.

Вуди Прайд
источник
15
Теперь это устарело, для позиционной индексации следует использовать
.iloc
87

вы также можете использовать iloc:

df.iloc[[1,3],:]

Это не сработает, если индексы в вашем фрейме данных не соответствуют порядку строк из-за предыдущих вычислений. В этом случае используйте:

df.index.isin([1,3])

... как предлагается в других ответах.

Йему
источник
62

Другой способ (хотя это более длинный код), но он быстрее, чем приведенные выше коды. Проверьте это с помощью функции% timeit:

df[df.index.isin([1,3])]

PS: Вы выясните причину

введите описание изображения здесь

Амрут Лаккаварам
источник
1
использовать df.index.get_level_values(0).isinдля мультииндекса
CiaranWelsh
4

Для больших наборов данных чтение только выбранных строк с помощью skiprowsпараметра эффективно с точки зрения памяти .

пример

pred = lambda x: x not in [1, 3]
pd.read_csv("data.csv", skiprows=pred, index_col=0, names=...)

Теперь это вернет DataFrame из файла, который пропускает все строки, кроме 1 и 3.


подробности

Из документов :

skiprows : списковый, целочисленный или вызываемый, по умолчанию None

...

Если вызываемая, вызываемая функция будет оцениваться по индексам строки, возвращая True, если строка должна быть пропущена, и False в противном случае. Пример действительного вызываемого аргумента:lambda x: x in [0, 2]

Эта функция работает в версии pandas 0.20.0+. См. Также соответствующий выпуск и связанный пост .

пиланг
источник