【问题标题】:How to access the last element in a Pandas series?如何访问 Pandas 系列中的最后一个元素?
【发布时间】: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] 这样的东西,但为什么反向索引在这里是不可能的?

【问题讨论】:

    标签: python pandas indexing


    【解决方案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 次循环)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多