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

时间:2013-10-17 21:17:00

标签: python pandas dataframe

我想返回一个可迭代对象,该对象由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]访问者导致类型强制创建一个Series对象,在我的情况下,数据类型是异构的(int16uint16uint32的组合)和我需要保留的类型。

1 个答案:

答案 0 :(得分: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: 

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