[英]obtaining last value of dataframe column without index
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
假设我有一个 DataFrame 例如:
df = pd.DataFrame(np.random.randn(10,5), columns = ['a','b','c','d','e'])
我想检索e
列中的最后一个值。 我可以:
df['e'].tail(1)
但这将返回一个索引为 9 的系列。 理想情况下,我只想获取可以直接使用的数字形式的值。 我也可以这样做:
np.array(df['e'].tail(1))
但这将要求我在真正使用它之前访问/调用它的第 0 个元素。 有没有更直接/更简单的方法来做到这一点?
您可以尝试数据帧的iloc
方法:
In [26]: df
Out[26]:
a b c d e
0 -1.079547 -0.722903 0.457495 -0.687271 -0.787058
1 1.326133 1.359255 -0.964076 -1.280502 1.460792
2 0.479599 -1.465210 -0.058247 -0.984733 -0.348068
3 -0.608238 -1.238068 -0.126889 0.572662 -1.489641
4 -1.533707 -0.218298 -0.877619 0.679370 0.485987
5 -0.864651 -0.180165 -0.528939 0.270885 1.313946
6 0.747612 -1.206509 0.616815 -1.758354 -0.158203
7 -2.309582 -0.739730 -0.004303 0.125640 -0.973230
8 1.735822 -0.750698 1.225104 0.431583 -1.483274
9 -0.374557 -1.132354 0.875028 0.032615 -1.131971
In [27]: df['e'].iloc[-1]
Out[27]: -1.1319705662711321
或者,如果您只想要标量,则可以使用速度更快的iat
。 从文档:
如果只想访问标量值,最快的方法是使用
at
和iat
方法,它们在所有数据结构上都实现
In [28]: df.e.iat[-1]
Out[28]: -1.1319705662711321
基准测试:
In [31]: %timeit df.e.iat[-1]
100000 loops, best of 3: 18 µs per loop
In [32]: %timeit df.e.iloc[-1]
10000 loops, best of 3: 24 µs per loop
尝试
df['e'].iloc[[-1]]
有时,
df['e'].iloc[-1]
不起作用。
我们还可以通过索引df.index
和at
来访问它:
df.at[df.index[-1], 'e']
它比iloc
快,但比没有索引慢。
如果我们决定为“e”列中的最后一个元素赋值,则上述方法比其他两个选项快得多(快 9-11 倍):
>>> %timeit df.at[df.index[-1], 'e'] = 1
11.5 µs ± 355 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
>>> %timeit df['e'].iat[-1] = 1
107 µs ± 4.22 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit df['e'].iloc[-1] = 1
127 µs ± 7.13 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)```
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.