Метод iloc возвращает другой тип данных - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть набор данных 30 obs и 2 столбца. Я использовал приведенный ниже код для создания независимого и зависимого набора данных для одной линейной регрессии.

Таким образом, каждый набор данных должен представлять собой массив из 1 столбца.

Но возвращаемое значение X - это 2-мерная матрица, а возвращаемое значение y - это 1-мерный массив. В чем причина?

Итак, моя очередь помещается в одну строку:

В чем разница между

X = dataset.iloc[:, 0].values

и

X = dataset.iloc[:, :-1].values?

Когда я использую:

X = dataset.iloc[:, 0].values
y = dataset.iloc[:, 1].values

X.shape
Out[207]: (30,)
y.shape
Out[204]: (30,)

Когда я использую:

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

X.shape
Out[203]: (30, 1)
y.shape
Out[204]: (30,)

1 Ответ

0 голосов
/ 31 декабря 2018

:-1 представляет диапазон 1 , а -1 - скаляр.Диапазоны являются 1-мерными, а скаляры - 0-мерными.Подумайте о линии против точки;диапазон - это линия, а скаляр - это точка.Это отражено в том, как Pandas преобразует диапазон против скаляра при индексации.

Следовательно, следующие данные эквивалентны для кадра данных с 2 столбцами:

df = pd.DataFrame(np.random.random((5, 2)))

df.iloc[:, :-1].shape  # (5, 1)
df.iloc[:, [0]].shape  # (5, 1)

Использование скаляра удалит дополнительное измерение,Вы можете сделать это несколькими способами:

df.iloc[:, 0].shape   # (5,)
df.iloc[:, -2].shape  # (5,)

Фактически, :-1 является синтаксическим сахаром для объекта slice: slice(0, -1).На практике более простой синтаксис предпочтителен, если вам не нужно передавать slice объекты вокруг.

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