如何访问 Pandas 系列中的最后一个元素?

Posted

技术标签:

【中文标题】如何访问 Pandas 系列中的最后一个元素?【英文标题】:How to access the last element in a Pandas series? 【发布时间】:2019-10-10 20:07:28 【问题描述】:

让我们考虑以下数据框:

import pandas as pd

d = 'col1': [1, 2, 3], 'col2': [3, 4, 5]
df=pd.DataFrame(data=d)

如果我想访问pandas系列的第一个元素df['col1'],我可以直接去df['col1'][0]

但是我怎样才能访问这个系列中的 last 元素呢? 我试过df['col1'][-1],它返回以下错误:

密钥错误:-1L

我知道我可以选择像df['col1'][len(df)-1] 这样的东西,但为什么反向索引在这里是不可能的?

【问题讨论】:

【参考方案1】:

对于选择最后一个值需要Series.ilocSeries.iat,因为df['col1']返回Series

print (df['col1'].iloc[-1])
3
print (df['col1'].iat[-1])
3

或将Series转换为numpy数组并选择最后一个:

print (df['col1'].values[-1])
3

或使用DataFrame.ilocDataFrame.iat - 但Index.get_loc 是列的必要位置:

print (df.iloc[-1, df.columns.get_loc('col1')])
3
print (df.iat[-1, df.columns.get_loc('col1')])
3

或者可以使用索引的最后一个值(必须不重复)并通过DataFrame.loc选择:

print (df.loc[df.index[-1], 'col1'])
3

【讨论】:

感谢您的回答,杰兹瑞尔! print (df['col1'].iloc[-1]) 会成功的。 从问题dfDataframe,而不是Series。使用Series 进行什么调整才能达到相同的效果? @Gathide 使用 s=pd. Series() 然后代替 df['col1'] 使用 s @jezrael s=pd.Series(data=d),然后s.iloc[-1] 给出[1, 2, 3] 而不是[3,5] - 每个col 的最后一个值。 @jezrael,谢谢,.str 做到了。我最初担心在字符串中进行计算(加法、平均等)。【参考方案2】:

你也可以使用tail:

print(df['col1'].tail(1).item())

输出:

3

【讨论】:

我必须说我发现print (df['col1'].iloc[-1]) 更直观,但感谢您提出这个解决方案,U9-Forward!【参考方案3】:

最后通过值是最快捷的方法:

%timeit df['code'].values[-1].   )

每个循环 5.58 µs ± 985 ns(7 次运行的平均值 ± 标准偏差,每次 100000 次循环)

%timeit df.loc[df.index[-1], 'code']

每个循环 12 µs ± 2.71 µs(7 次运行的平均值 ± 标准偏差,每次 100000 个循环)

%timeit df['code'].iat[-1]

每个循环 5.71 µs ± 896 ns(7 次运行的平均值 ± 标准偏差,每次 100000 次循环)

%timeit df['code'].tail(1).item()

每个循环 36 µs ± 3.23 µs(7 次运行的平均值 ± 标准偏差,每次 10000 个循环)

%timeit df.iloc[-1, df.columns.get_loc('code')]

每个循环 33.7 µs ± 5.23 µs(7 次运行的平均值 ± 标准偏差,每次 10000 个循环)

%timeit df['code'].iloc[-1]

每个循环 8.08 µs ± 496 ns(7 次运行的平均值 ± 标准偏差,每次 100000 次循环)

【讨论】:

以上是关于如何访问 Pandas 系列中的最后一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问数组中的最后一个元素?

访问 Pandas DataFrame 元素中的列表

在 ms 访问表单中检查列表中的最后一个元素

※剑指offer系列54:矩阵中的路径

数据结构系列-线性表(顺序表和链表)

Django - 在模板中格式化/访问 Pandas.to_dict() 数据框