【问题标题】:get the last row of a pandas DataFrame, as an iterable object获取 pandas DataFrame 的最后一行,作为可迭代对象
【发布时间】:2013-10-17 21:17:00
【问题描述】:
我想返回一个由 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、uint16 和 uint32 的组合),我需要保留这些类型。
【问题讨论】:
标签:
python
pandas
dataframe
【解决方案1】:
使用.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:
您应该仔细考虑为什么要这样做。矢量化操作几乎总是比迭代操作好。