Как DataFrame дает этот результат?

1

Шаг 1: отобразите первые 10 строк:

In [13]: data[:10]
Out[13]: 
   admit  gre   gpa  rank
0      0  380  3.61     3
1      1  660  3.67     3
2      1  800  4.00     1
3      1  640  3.19     4
4      0  520  2.93     4
5      1  760  3.00     2
6      1  560  2.98     1
7      0  400  3.08     2
8      1  540  3.39     3
9      0  700  3.92     2

Шаг 2: список всех строк, имеющих ранг 1

 In [15]: data["rank"]==1
    Out[15]: 
    0      False
    1      False
    2       True
    3      False
    4      False
    5      False
    6       True
    7      False
    8      False
    9      False
    10     False

Шаг 3: Произведите список строк с рангом = 1

In [16]: data[data["rank"]==1]
Out[16]: 
     admit  gre   gpa  rank
2        1  800  4.00     1
6        1  560  2.98     1
11       0  440  3.22     1
12       1  760  4.00     1
14       1  700  4.00     1
19       1  540  3.81     1
25       1  800  3.66     1
26       1  620  3.61     1
29       0  520  3.29     1

Я не понимаю шаг 3. Почему данные [boolean] производят фактические строки с рангом == 1?

Теги:
pandas

2 ответа

0
Лучший ответ

data[boolean] где data являются фреймворком данных, а boolean - некоторая последовательность логических значений, означает: выровнять boolean индекс с индексом data и выбирать значения data где соответствующее boolean значение равно True. Если boolean имеет индекс, он должен соответствовать взаимно однозначному, если он не должен иметь одинаковую длину.

Таким образом, вы можете, например, выбрать первое значение в вашем фреймворке с вектором [True, False,..., False]

>>> data[[True] + [False] * 9]
    admit   gre     gpa     rank
0   0   380     3.61    3

Если boolean не имеет такой же длины, например

>>> data[[True] + [False] * 10]

вы получаете

ValueError: Item wrong length 11 instead of 10.

Если boolean имеет индекс, который не соответствует, вы получаете IndexingError

>>> data[(data["rank"] == 1)[:9]]
IndexingError: Unalignable boolean Series provided as indexer

Если вы измените имена индексов

>>> (data["rank"] == 1).add_prefix('_')
_0    False
_1    False
_2     True
_3    False
_4    False
_5    False
_6     True
_7    False
_8    False
_9    False
Name: rank, dtype: bool

вы также получите сообщение об ошибке:

>>> data[(data["rank"].add_prefix('_') == 1)]
IndexingError: Unalignable boolean Series provided as indexer

Это называется булевским индексированием. Существует также индексирование на основе метки, data.loc[] (которая может быть числовой или строковой или датированной) или абсолютной позиции, data.iloc[] и унаследованного метода data.ix[] который использовался для обе эти.

1

Потому что он действует как маска. Проверьте эту ссылку pandas

Ещё вопросы

Сообщество Overcoder
Наверх
Меню