Python pandas:为什么我的训练数据的df.iloc [:,:-1] .val选择到最后一列?

kwo*_*sin 9 python pandas

非常简单地说,对于相同的训练数据帧df,当我使用X = df.iloc [:,:-1] .values时,它将选择直到数据帧的倒数第二列而不是最后一列(这是我想要的但是这是一个我以前从未见过的奇怪行为,而且我知道这是第二列的第二个值,而该行的最后一列的值是不同的.

但是,使用y = df.iloc [:, - 1] .values给出了最后一列的值的行向量,这正是我想要的.为什么X的负1给我第二列的第二个值呢?

错误

jez*_*ael 10

我认为您只有两列df,因为如果有更多列,请iloc选择所有列而不是最后一列:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

print(df.iloc[:, :-1])
   A  B  C  D  E
0  1  4  7  1  5
1  2  5  8  3  3
2  3  6  9  5  6

X = df.iloc[:, :-1].values
print (X)
[[1 4 7 1 5]
 [2 5 8 3 3]
 [3 6 9 5 6]]

print (X.shape)
(3, 5)
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

只是为了清楚起见

关于python语法,这个问题已经在这里得到解答。

Python 列表切片语法规定,a:b它将获取a以及 之前但不包括 的所有内容ba:将会得到a以及之后的一切。 :b会得到之前的一切b但没有b。的列表索引-1指的是最后一个元素。 :-1遵循与上面相同的标准,因为这会获取最后一个元素之前的所有内容,但不是最后一个元素。如果您想要包含最后一个元素,请使用:.