我希望以顺序方式对数据框中的财务数据执行我自己的复杂操作.
例如,我使用从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
....
Run Code Online (Sandbox Code Playgroud)
然后我做以下事情:
#!/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..
Run Code Online (Sandbox Code Playgroud)
这是最有效的方式吗?鉴于对熊猫速度的关注,我认为必须有一些特殊的函数来迭代遍历值,同时也检索索引(可能通过生成器来节省内存)?df.iteritems遗憾的是,只能逐列迭代.
我正在给一个玩具示例,但它会帮助我理解我正在尝试做的其他事情.假设我想要一个数据框'optimal_fruit'中的新列,即apple*orange - bananas.
我可以做这样的事情来获得它.
df2['optimal_fruit'] = df2['apples'] * df2['oranges'] - df2['bananas']
apples oranges bananas optimal_fruit
1 6 11 -5
2 7 12 2
3 8 13 11
4 9 14 22
5 10 15 35
Run Code Online (Sandbox Code Playgroud)
如果我尝试做这样的事情会发生什么?我怎么能在列表理解中做到这一点?
df2['optimal_fruit'] = [x * y - z for x in df2['apples'] for y in df2['oranges'] for z in df2['bananas']]
Run Code Online (Sandbox Code Playgroud)
我得到一个错误:
ValueError:值的长度与索引的长度不匹配
一如既往,非常感谢你的帮助!