Шаг 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?
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[]
который использовался для обе эти.
Потому что он действует как маска. Проверьте эту ссылку pandas