【发布时间】:2016-10-20 03:11:10
【问题描述】:
我已经做了一些寻找这个问题的答案,但我能弄清楚的是:
df[df.columns[len(df.columns)-1]]
在我看来,这看起来很笨拙,而且不像 Python 那样(而且很慢?)。
在不指定列名的情况下为 pandas 数据框中的最后一列选择数据的最简单方法是什么?
【问题讨论】:
我已经做了一些寻找这个问题的答案,但我能弄清楚的是:
df[df.columns[len(df.columns)-1]]
在我看来,这看起来很笨拙,而且不像 Python 那样(而且很慢?)。
在不指定列名的情况下为 pandas 数据框中的最后一列选择数据的最简单方法是什么?
【问题讨论】:
使用 iloc 并针对最后一列 (-1) 选择所有行 (:):
df.iloc[:,-1:]
【讨论】:
Series 上操作,就会发生这种情况 - 请确保您使用的是 DataFrame
有点类似于您最初的尝试,但更 Pythonic,是使用 Python 的标准负索引约定从末尾倒数:
df[df.columns[-1]]
【讨论】:
df[df.columns[-1] >= 10] 它给了我“在 'str' 和 'int' 的实例之间不受支持”
这些东西可以帮助你理解一切……使用 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]
这意味着您想要除最后一列和最后一行之外的所有列和所有行...
【讨论】:
只是为了补充@Anshul Singh Suryan 的回答:
当我们拆分数据框以获取最后一列时:
如果我们像这样拆分:
y = df.iloc[:,-1:] - y 仍然是 dataframe
但是,如果我们像这样分开
y = df.iloc[:,-1] - y 变为 Series。
这是我在两种方法中发现的显着差异。如果您不关心结果类型,则可以使用两者中的任何一个。否则,您需要注意上述发现。
这适用于您要提取的任意数量的行,而不仅仅是最后一行。
例如,如果您想要最后一个 n 数据帧的行数,其中 n 是小于或等于数据帧中存在的列数的任何整数,那么您可以轻松地执行以下操作:
y = df.iloc[:,n:]
将n 替换为您想要的列数。行也是如此。
【讨论】:
问题是:如何选择数据框的最后一列? Appart @piRSquared,没有人回答这个问题。
获取最后一列数据框的最简单方法是:
df.iloc[ :, -1:]
【讨论】:
df.T.iloc[-1]
df.T.tail(1)
pd.Series(df.values[:, -1], name=df.columns[-1])
【讨论】:
这是另一种方法。我想也许更笼统一些:
df.ix[:,-1]
【讨论】:
ix 混合标签和索引位置访问器。请参阅here 了解更多信息。
ix 现在已被弃用。