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

She*_*don 26 python indexing pandas

让我们考虑以下数据框:

import pandas as pd

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

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

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

密钥错误:-1L

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

jez*_*ael 50

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

print (df['col1'].iloc[-1])
3
print (df['col1'].iat[-1])
3
Run Code Online (Sandbox Code Playgroud)

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

print (df['col1'].values[-1])
3
Run Code Online (Sandbox Code Playgroud)

或使用DataFrame.ilocor 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
Run Code Online (Sandbox Code Playgroud)

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

print (df.loc[df.index[-1], 'col1'])
3
Run Code Online (Sandbox Code Playgroud)


小智 16

最后获取值是最快的方法:

\n
%timeit df['code'].values[-1].   )\n
Run Code Online (Sandbox Code Playgroud)\n
\n

5.58 \xc2\xb5s \xc2\xb1 每个循环 985 ns(意味着 \xc2\xb1 标准偏差 7 次运行,每次 100000 次循环)

\n
\n
%timeit df.loc[df.index[-1], 'code']\n
Run Code Online (Sandbox Code Playgroud)\n
\n

12 \xc2\xb5s \xc2\xb1 2.71 \xc2\xb5s 每个循环(平均 \xc2\xb1 标准偏差 7 次运行,每次 100000 次循环)

\n
\n
%timeit df['code'].iat[-1]\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

5.71 \xc2\xb5s \xc2\xb1 每个循环 896 ns(意味着 \xc2\xb1 标准偏差 7 次运行,每次 100000 次循环)

\n
\n
%timeit df['code'].tail(1).item()\n
Run Code Online (Sandbox Code Playgroud)\n
\n

36 \xc2\xb5s \xc2\xb1 3.23 \xc2\xb5s 每个循环(平均 \xc2\xb1 标准偏差 7 次运行,每次 10000 次循环)

\n
\n
%timeit df.iloc[-1, df.columns.get_loc('code')]\n
Run Code Online (Sandbox Code Playgroud)\n
\n

33.7 \xc2\xb5s \xc2\xb1 5.23 \xc2\xb5s 每个循环(平均 \xc2\xb1 标准偏差 7 次运行,每次 10000 次循环)

\n
\n
%timeit df['code'].iloc[-1]\n
Run Code Online (Sandbox Code Playgroud)\n
\n

8.08 \xc2\xb5s \xc2\xb1 每个循环 496 ns(平均 \xc2\xb1 标准偏差 7 次运行,每次 100000 次循环)

\n
\n


U10*_*ard 7

您还可以使用tail

print(df['col1'].tail(1).item())
Run Code Online (Sandbox Code Playgroud)

输出:

3
Run Code Online (Sandbox Code Playgroud)