我有一个30 obs和2列的数据集,我使用下面的代码来创建独立的和依赖的数据集以进行一次线性回归。
因此,每个数据集均应为1列数组。
但是返回X是2d数组,返回y是1d数组是什么原因?
因此,我的问题要放在一行:
两者之间有什么区别
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,)
答案 0 :(得分:0)
:-1
表示范围 1 ,而-1
是标量。范围是1维的,而标量是0维的。想想一条线与一个点;范围是一条线,而标量是一个点。这体现在Pandas在编制索引时如何转换范围与标量。
因此,以下内容等效于具有两列的数据框:
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
对象,否则首选更简单的语法。
答案 1 :(得分:0)
iloc函数的输出是用于1-d数组的串联返回类型和用于矩阵的2-d数组。这就是为什么在您的情况下,当给定y的索引(它是1-d数组)时,它返回一个序列,对于数据集的其余部分,它返回一个二维数组。