如何选择数据框的最后一列


81

我已经做了一些寻找该问题答案的搜索,但是我能弄清楚的是:

df[df.columns[len(df.columns)-1]]

在我看来,这似乎很古怪,又不合Python(并且很慢?)。

在不指定列名的情况下,为pandas数据框中的最后一列选择数据的最简单方法是什么?

Answers:


142

使用iloc并:针对最后一列(-1)选择所有行():

df.iloc[:,-1:]

6
我试图这样做,并收到一条错误消息,指出“索引器太多”
user287474 '18

34

类似于您最初的尝试,但更像Python一样,是使用Python的标准负索引约定从末尾开始倒数:

df[df.columns[-1]]

22

这些都是可以帮助您理解一切的几件事...使用iloc

在iloc中,[初始行:结束行,初始列:结束列]

情况1:如果只想要最后一列---df.iloc[:,-1] & df.iloc[:,-1:] 这意味着您只想要最后一列...

情况2:如果要除最后一列以外的所有列和所有行---df.iloc[:,:-1] 这意味着您希望除最后一列以外的所有列和所有行...

情况3:如果只想要最后一行---df.iloc[-1:,:] & df.iloc[-1,:] 这意味着您只想要最后一行...

情况4:如果您要除最后一行以外的所有列和所有行---df.iloc[:-1,:] 这意味着您要除最后一列以外的所有列和所有行...

情况5:如果您想要除最后一行和最后一列以外的所有列和所有行---df.iloc[:-1,:-1] 这意味着您希望除最后一列和最后一行以外的所有列和所有行...


6

问题是:如何选择数据框的最后一列?Appart @piRSquared,没有人回答这个问题。

获取带有最后一列的数据框的最简单方法是:

df.iloc[ :, -1:]

4

只是添加到@Anshul Singh Suryan的答案中:

当我们拆分数据框以获取最后一列时:

如果我们像这样分裂:

y = df.iloc[:,-1:] - y 仍然是一个 dataframe

但是,如果我们像

y = df.iloc[:,-1] - y成为一个Series

这是我在两种方法中发现的显着差异。如果您不关心结果类型,则可以使用两者之一。否则,您需要照顾以上发现。

这适用于您要提取的任意数量的行,而不仅仅是最后一行。例如,如果您想要n数据帧的最后行数,其中n是小于或等于数据帧中存在的列数的任何整数,那么您可以轻松地执行以下操作:

y = df.iloc[:,n:]

替换n为所需的列数。行也是如此。


3
df.T.iloc[-1]

df.T.tail(1)

pd.Series(df.values[:, -1], name=df.columns[-1])

1
与直接调用iloc相比,我看不到从numpy值提取中显式构建Series的任何价值
Boud

@Boud,有很多方法可以做到这一点。我只是想把一堆东西扔掉。诚然,第三个选择是最弱的。
piRSquared '16

1

这是另一种方法。我认为可能更一般一些:

df.ix[:,-1]

1
在这种情况下,不建议您使用答案,因为该问题会明确询问基于索引位置的最后一列。ix混合标签和索引位置访问器。看到这里更多。
pansen

4
确实,此外,ix到现在为止已被弃用。
Archie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.