Как DataFrame дает этот результат? - PullRequest
0 голосов
/ 22 сентября 2018

Шаг 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: Создать список строк сrank = 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. Почему data [boolean] создает фактические строки с rank == 1?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

data[boolean], где data - это датафрейм, а boolean - некоторая последовательность логических значений: выровнять boolean индекс с data индексом и выбрать data значений, где соответствующее boolean значение равно * 1008.*.Если 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[], который был использован для обоих из них.

0 голосов
/ 22 сентября 2018

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

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