是否iloc [:,1:2]。值和.iloc [:,1] .values的工作方式不同吗?

时间:2019-07-07 19:45:29

标签: python python-3.x pandas numpy numpy-ndarray

如果我用pandas dataframedataset.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 个答案:

答案 0 :(得分:3)

df.iloc[:, 1:2]返回一个数据帧(矩阵),而df.iloc[:, 1]返回一个序列(矢量)。向量没有列大小。如果要保留数据框结构,请尝试此操作

df.iloc[:,[1]]

答案 1 :(得分:1)

从技术上讲,您使用的切片方法称为'Selection by Position'iloc被称为基于整数的位置。

当您使用df.iloc[:, 1:2]时,结果输出将是pandas DataFrame对象:

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

当您使用df.iloc[:, 1]时,结果输出将是pandas Series对象:

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

了解差异至关重要,因为每个对象都有不同的方法,这些方法可能不适用于其他对象。

答案 2 :(得分:0)

是的, iloc [:,1:2]和iloc [:,1] 不一样,一个是给Dataframe的,另一个是给严重的。

使用df.iloc [:,1:2]给出数据框,并且由于数据框是2维数据结构,因此它以2维给出

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

使用df.iloc [:,1]可以得到Series,并且Series是一维标记的数组

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

答案 3 :(得分:0)

Pandas iloc()实际上正在执行Python上下文中应有的功能。比较以下内容。

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

前者提供0维数据,而后者提供1维数据,类似于您的示例。