Делает iloc [:, 1: 2]. Значения и .iloc [:, 1]. Значения работают по-разному? - PullRequest
0 голосов
/ 07 июля 2019

Если я нарежу pandas dataframe на dataset.iloc[:, 1:2].values, это даст мне 2 dimensional(matrix) структурированные данные, где dataset.iloc[:, 1].values даст мне 1 dimensional данные. Итак, я сомневаюсь, что iloc[:,1:2] & iloc[:,1] не делает то же самое?

Вот пример кода:

    >>> df1 = df.iloc[:, 1:2].values
    >>> print(df1.shape,df1.ndim)
    (9578, 1) 2
    >>> df2 = df.iloc[:, 1].values
    >>> print(df2.shape,df2.ndim)
    (9578,) 1
    >>>

Ответы [ 4 ]

3 голосов
/ 07 июля 2019

df.iloc[:, 1:2] возвращает фрейм данных (матрицу), тогда как df.iloc[:, 1] возвращает серию (вектор). Вектор не имеет размера столбца. Попробуйте это, если хотите сохранить структуру данных

df.iloc[:,[1]]
1 голос
/ 07 июля 2019

Технически говоря, метод нарезки, который вы используете, называется 'Выбор по позиции' . iloc называется целочисленным местоположением.

При использовании df.iloc[:, 1:2] результирующий вывод будет объектом DataFrame pandas:

>>> type(df.iloc[:, 1:2])
pandas.core.frame.DataFrame

Когда вы используете df.iloc[:, 1], в результате вы получите объект серии Pandas:

>>> type(df.iloc[:, 1])
pandas.core.series.Series

Знать разницу важно, потому что у каждого объекта есть разные методы, которые могут не работать с другим объектом.

0 голосов
/ 09 июля 2019

Pandas iloc() на самом деле делает то, что вы должны ожидать в контексте Python.Сравните следующее.

>>> numbers = [0, 1, 2]
>>> numbers[1]
1
>>> numbers[1:2]
[1]

Первый дает 0-мерные данные, а последние - 1-мерные данные, аналогичные вашему примеру.

0 голосов
/ 09 июля 2019

Да, iloc [:, 1: 2] & iloc [:, 1] они не похожи, так как один дает Dataframe, а другой дает Serious в качестве вывода.

Использование df.iloc [:, 1: 2] дает Dataframe и дает 2-й, так как Dataframe является 2-й структурой данных

type(df.iloc[:, 1:2])
pandas.core.frame.DataFrame

Использование df.iloc [:, 1] дает серии, а серия представляет собой массив с 1-й меткой

type(df.iloc[:, 1])
pandas.core.series.Series
...