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

新手上路,请多包涵

让我们考虑以下数据框:

 import pandas as pd

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

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

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

键错误:-1L

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

原文由 Sheldon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 962
2 个回答

对于选择的最后值需要 Series.iloc df['col1'] Series Series.iat 或——–或——或

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

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

 %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 次循环)

原文由 not_a_coder 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏