在特定索引上启动 iterrows() 循环

Posted

技术标签:

【中文标题】在特定索引上启动 iterrows() 循环【英文标题】:Starting iterrows() loop on a particular index 【发布时间】:2014-06-15 20:46:28 【问题描述】:

我正在使用iterrows() 对使用时间戳作为索引的数据集进行计算。如下所示:

>>> aapl.head()
Date        Open   High    Low  Close    Volume  Adj Close                                                        
1980-12-12  28.75  28.88  28.75  28.75  16751200       3.15
1980-12-15  27.38  27.38  27.25  27.25   6281600       2.99
1980-12-16  25.38  25.38  25.25  25.25   3776000       2.77
1980-12-17  25.88  26.00  25.88  25.88   3087200       2.84
1980-12-18  26.62  26.75  26.62  26.62   2623200       2.92

我计划使用for index in aapl.iterrows() 进行计算,但我只查看特定年份内的值,并且数据集包含的数据远不止于此。如何让我的循环以特定索引值(在这​​种情况下为时间戳)开始并以另一个索引值结束?

非常感谢您的任何建议。

【问题讨论】:

你应该展示你在运营方面的计划。循环通常不是一个好的解决方案。 您还应该能够使用此处的方法创建该数据帧的子集:pandas.pydata.org/pandas-docs/dev/… 【参考方案1】:

大多数 python 迭代函数都有一个可选的 start 参数。 DataFrames 没有,但 DataFrames 通常更容易分割。所以我建议先切片然后迭代:

for row, value in aapl.loc['1980-12-18':].iterrows():
    # do stuff.

.loc 中的内容取决于您想要的内容。你甚至可以使用.ix[<YEAR>],比如.ix['1990']

【讨论】:

感谢您的回复!这似乎是一个合乎逻辑的解决方案,但我不断收到以下错误:>>> for row, value in joined.loc['2012-12-18':].iterrows(): ... print row['Close_NCBC'] Traceback (most recent call last): File "<pyshell#119>", line 2, in <module> print row['Close_NCBC'] TypeError: 'Timestamp' object has no attribute '__getitem__'任何我可能忽略的东西? 你不想要价值['Close_NCBC'] 吗? @user1827356 感谢您的回复。的确如此;上面的脚本只是为了测试在给定起点运行 for 循环的建议解决方案。手头的错误来自使用循环中的时间戳;打印命令似乎不是问题。

以上是关于在特定索引上启动 iterrows() 循环的主要内容,如果未能解决你的问题,请参考以下文章

从 Pandas 中的 iterrows() 获取行位置而不是行索引

Pandas.DataFrame 的 iterrows()方法详解

如何使用 iterrows 通过函数循环数据帧,该函数需要 3 个参数来填充新数据帧

pandas iterrows()

如果满足条件,Pandas iterrows 在迭代期间不能跳过行

QDataWidgetMapper-在pyqt中查找sql​​ite数据库行的索引