在特定索引上启动 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 个参数来填充新数据帧