当前位置: 首页 > 面试题库 >

Python-用pandas遍历数据帧的最有效方法是什么?

令狐经武
2023-03-14
问题内容

我想按顺序对数据帧中的财务数据执行自己的复杂操作。

例如,我正在使用以下来自Yahoo Finance的 MSFT CSV文件:

Date,Open,High,Low,Close,Volume,Adj Close
2011-10-19,27.37,27.47,27.01,27.13,42880000,27.13
2011-10-18,26.94,27.40,26.80,27.31,52487900,27.31
2011-10-17,27.11,27.42,26.85,26.98,39433400,26.98
2011-10-14,27.31,27.50,27.02,27.27,50947700,27.27

....

然后,我执行以下操作:

#!/usr/bin/env python
from pandas import *

df = read_csv('table.csv')

for i, row in enumerate(df.values):
    date = df.index[i]
    open, high, low, close, adjclose = row
    #now perform analysis on open/close based on date, etc..

那是最有效的方法吗?考虑到对熊猫速度的关注,我认为必须有一些特殊的函数来迭代这些值,使它们也可以检索索引(可能通过生成器来提高内存效率)?df.iteritems不幸的是,只能逐列进行迭代。


问题答案:

熊猫的最新版本现在包括用于遍历行的内置函数。

for index, row in df.iterrows():

    # do some logic here

或者,如果你想更快地使用它 itertuples()

但是,unutbu建议使用numpy函数以避免对行进行迭代将产生最快的代码。



 类似资料:
  • 问题内容: 我从书中得知,您应该为循环编写这样的代码: 因此不会每次都计算。 其他人则说编译器会对此做一些优化,因此您可以编写: 我只想知道哪种是最佳实践? 问题答案: 在使用大多数现代浏览器执行此测试之后… http://jsben.ch/dyM52 当前,最快的循环形式(我认为在语法上最明显)。 具有长度缓存的循环的标准 我想肯定的是,我为JavaScript引擎开发人员鼓掌。应该优化运行时间

  • 问题内容: 目前,我正在使用类似: 我对这种方法不是很满意,因为它会创建大量数组(可以包含一本书)。 有没有更好的解决方案来迭代a的行? 问题答案: 您可以使用: 并使用方法:

  • 问题内容: 组织以下pandas数据框的最有效方法是什么: 数据= 变成字典一样? 问题答案: In [9]: pd.Series(df.Letter.values,index=df.Position).to_dict() Out[9]: {1: ‘a’, 2: ‘b’, 3: ‘c’, 4: ‘d’, 5: ‘e’} 速度比较(使用Wouter方法)

  • 问题内容: 我想将许多文件都当作一个文件来对待。用生成器/不将整个文件读入内存的[文件名] => [文件对象] => [行]的正确pythonic方法是什么? 我们都知道打开文件的正确方法: 而且我们知道将多个迭代器/生成器链接为一个长链的正确方法: 但是如何将多个文件链接在一起并保留上下文管理器? 我可以忽略上下文管理器并执行类似的操作,但是感觉不对: 还是这种异步IO-PEP 3156 用途是

  • 问题内容: 在Java中遍历所有DOM元素的最有效方法是什么? 像这样,但是对于当前的每个DOM元素呢? 问题答案: 基本上,您可以通过两种方式遍历所有元素: 1.使用递归 (我认为是最常见的方式): 2. 使用带有as参数的方法 避免递归 : 我认为这些方式都很有效。 希望这可以帮助。

  • 问题内容: 假设我有两个或两个以上相同长度的列表。遍历它们的好方法是什么? ,是列表。 要么 还是我缺少任何变体? 使用一个相对于另一个有什么特别的优势吗? 问题答案: 通常的方法是使用: 这将停止两个iterables时较短且耗尽。另外值得注意的是:(仅适用于Python 2)和(适用于Python 3)。