将pandas DataFrame的最后一行作为可迭代对象获取

3
我希望返回一个可迭代对象,其中包含pandas DataFrame中最后一行的值。尽管有点冗长,但似乎这个方法是有效的:
data.tail(1).itertuples(index=False).next()
# get the first item when iterating over the last 1 items as a tuple, 
#   excluding the index

有更简单的方法吗,还是我所拥有的是最好的?


编辑:两个重要的事项:

  • 我没有试图实现高性能(这只是一大表中的一行)
  • .iloc[n] 访问器会导致类型转换以创建一个序列对象,在我的情况下,数据类型是异构的(int16uint16uint32 的组合),我需要保留这些类型。
1个回答

3

通过 .values 属性访问底层数组,并将其解包到内置的 iter 函数中。

In [29]: df = pd.DataFrame([['a', 'b'], ['c', 'a']], columns=['A', 'B'])

In [30]: df
Out[30]: 
   A  B
0  a  b
1  c  a

In [31]: gen = iter(*df.tail(1).values)

In [32]: next(gen)
Out[32]: 'c'

In [33]: next(gen)
Out[33]: 'a'

In [34]: next(gen)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-34-8a6233884a6c> in <module>()
----> 1 next(gen)

StopIteration: 

您应该仔细考虑为什么要这样做。向量化操作几乎总是比迭代操作更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接