【问题标题】: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 对象,在我的情况下,数据类型是异构的(int16uint16uint32 的组合),我需要保留这些类型。

【问题讨论】:

    标签: 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: 
    

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

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2014-08-04
      • 1970-01-01
      • 2019-04-17
      • 2013-01-17
      • 1970-01-01
      • 2018-01-15
      • 2013-09-02
      相关资源
      最近更新 更多