Правильный способ ссылки на ячейки в pandas данных - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь ссылаться на столбцы и строки в моем pandas кадре данных и получаю некоторые ошибки.

Заголовок кадра данных:

enter image description here

Я создал еще два кадра данных, которые будут содержать значения всех пройденных учащихся (с результатом = 1 ) и не удалось (результат = 0)

fail=data[data[:]['Result']==0]
passed=data[data[:]['Result']==1]

Теперь я хочу построить график (точечный график) всех значений неуспешных на экзамене 1 (по оси X) и неудачных на экзамене 2 (в ось y)

Я пытался использовать слайс, но он продолжает приводить к ошибке

Попытка

passed[:][0]    #Does not print the first column of the passed dataframe

Выдает ошибку

KeyError: 0

У меня есть два запроса

  1. Когда мы используем lo c и ilo c и когда мы используем нарезку в pandas фреймах данных
  2. Когда мы используем [[] ] двойные квадратные скобки, чтобы вернуть фрейм данных, я предполагал, что мы сделаем это при сбое и передал фрейм данных, но он работал с одним [], который, как я слышал, вернул серию.

1 Ответ

1 голос
/ 22 марта 2020

Во-первых, канонический способ сделать то, что вы делаете, это:

fail   = data[data['Result']==0]
passed = data[data['Result']==1]

Это сокращение от

fail   = data.loc[data['Result']==0, :]
passed = data.loc[data['Result']==1, :]

loc для нарезки по меткам, в то время как iloc предназначен для нарезки по индексу (ie, если вы знаете, какие номера строк / столбцов вы хотите).

Различие между одинарными и двойными скобками заключается в следующем: если вы возвращаете более одного столбца, Pandas по необходимости вернет кадр данных. Если ваш запрос возвращает один столбец, Pandas по умолчанию возвращает серию. Если вы используете двойные скобки, это даст вам фрейм данных формы (num_rows, 1). В вашем случае это не имеет значения, поскольку вы возвращаете несколько столбцов.

Наконец, если вы используете Pandas ранее, чем версия 1.0.0, вам следует использовать копии фреймов данных:

fail   = data[data['Result']==0].copy()
passed = data[data['Result']==1].copy()

Это предотвращает пресловутый SettingWithCopyWarning, если вы позже внесете изменения.

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