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]器导致类型强制创建一个 Series 对象,在我的情况下,数据类型是异构的(和的组合) int16,我需要保留类型。uint16uint32
4

1 回答 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: 

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

于 2013-10-18T13:24:20.007 回答