【问题标题】:Does iloc[ :, 1:2 ]. values and .iloc[ :, 1].values work differently?iloc[ :, 1:2 ]。 values 和 .iloc[ :, 1].values 的工作方式不同吗?
【发布时间】:2019-11-17 10:00:15
【问题描述】:

如果我将 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
    >>>

【问题讨论】:

  • 由于您得到不同的结果,因此可以肯定地说他们没有做同样的事情。
  • .iloc[:,1] 返回系列,而 .iloc[:,1:2] 返回数据帧。与df['A'] 返回系列而df[['A']] 返回数据帧相同

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


【解决方案1】:

Pandas iloc() 实际上正在执行您在 Python 上下文中所期望的操作。比较以下。

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

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

【讨论】:

    【解决方案2】:

    是的,iloc[:,1:2] 和 iloc[:,1] 这些不相似,因为一个提供 Dataframe,另一个提供 Serious 作为输出。

    使用 df.iloc[:,1:2] 给出 Dataframe 并给出二维,因为 Dataframe 是一个二维数据结构

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

    使用 df.iloc[:,1] 给出 Series 并且 Series 是一维标记数组

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

    【讨论】:

      【解决方案3】:

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

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

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

      当您使用df.iloc[:, 1] 时,结果输出将是一个熊猫系列对象:

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

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

      【讨论】:

        【解决方案4】:

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

        df.iloc[:,[1]]
        

        【讨论】:

          猜你喜欢
          • 2019-07-31
          • 2019-10-12
          • 1970-01-01
          • 2015-10-14
          • 2019-08-23
          • 2020-10-10
          相关资源
          最近更新 更多