首页 > 解决方案 > iloc 方法返回不同类型的数据

问题描述

我有一个 30 obs 和 2 列的数据集,我使用下面的代码为单个线性回归创建独立和依赖的数据集。

所以每个数据集都应该是一个 1 列的数组。

但是返回 X 是一个二维数组,返回的 y 是一个一维数组,这是什么原因?

所以把我的问题放在一行中:

有什么区别

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,)

标签: pythonpython-3.xpandasdataframeindexing

解决方案


:-1表示范围1,而-1是标量。范围是一维的,而标量是零维的。想想一条线与一个点;范围是一条线,而标量是一个点。这反映在 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,)

实际上,:-1slice对象的语法糖:slice(0, -1). 实际上,除非您需要传递slice对象,否则首选更简单的语法。


推荐阅读