如果我用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
>>>
答案 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维数据,类似于您的示例。