这是我正在使用的代码。
from datetime import date, datetime, timedelta
import pandas_datareader.data as web
todays_date = date.today()
n = 30
date_n_days_ago = date.today() - timedelta(days=n)
stock_data = web.DataReader('ACC.NS', 'yahoo', date_n_days_ago, todays_date)
stock_data = stock_data[stock_data.Volume != 0].tail(20)
stock_data = stock_data[['Adj Close']]
现在我去ipython termnal并输入:
stock_data['Adj Close'].iloc[[19]] > stock_data['Adj Close'].iloc[[0]]
然后我得到的输出是:
Date
2016-02-18 True
但是当我去我的IPython(或我的编辑Spyder)和代码时:
if stock_data['Adj Close'].iloc[[19]] > stock_data['Adj Close'].iloc[[0]]:
print " greater"
我得到的输出是:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我怀疑:为什么会这样?
目前我找到了一个解决方法代码:
adj_close_list = stock_data.values.T.tolist()
if adj_close_list[0][19] > adj_close_list[0][0]:
print "greater"
else:
print "less"
有什么办法可以解决这个问题,并直接比较DataFrame中的两个单元格吗?
答案 0 :(得分:1)
删除额外的[]
:
if stock_data['Adj Close'].iloc[19] > stock_data['Adj Close'].iloc[0]:
print('greater')
else:
print('less')
这给你一个浮点数,即一个单元格:
>>> stock_data['Adj Close'].iloc[19]
1256.3499999999999
但这会给你一个系列:
>>> stock_data['Adj Close'].iloc[[19]]
Date
2016-02-18 1.256E+03
Name: Adj Close, dtype: float64
当你比较两个系列时,你会得到另一个系列,你不能直接在if语句中使用它。