如何访问 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.iloc
或Series.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.iloc
或DataFrame.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])
会成功的。
从问题df
是Dataframe
,而不是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 系列中的最后一个元素?的主要内容,如果未能解决你的问题,请参考以下文章