在从雅虎获得比特币(BTC-USD)的数据之后,我尝试创建一个新的列来显示每天的收盘价是否高于开盘价。你知道吗
我要做的是创建一个列,当Close高于Open时显示1。如果条件不成立,则为0。你知道吗
当我尝试比较关闭值和打开值时,我会收到下一条消息:ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。你知道吗
我尝试过几种方法来解决这个问题(比如直接从Yahoo导入CSV数据),但不幸的是我找不到解决方案。你知道吗
下面您可以看到我使用的代码:
import pandas as pd
import pandas_datareader as dr
df = dr.data.get_data_yahoo('btc-usd',start = '01-01-2015', end= '31-12-2018')
df.head(2)
df['X'] = [1 if (df.loc[ei,'Close'] > df.loc[ei,'Open']) else 0 for ei in df.index] #---> The error is produced in this line of code
df.tail()
下面您可以看到错误消息:
ValueError Traceback (most recent call last)
<ipython-input-45-eb64775bf24f> in <module>
----> 1 df['X'] = [1 if (df.loc[ei,'Close'] > df.loc[ei,'Open']) else 0 for ei in df.index]
2 df.tail()
<ipython-input-45-eb64775bf24f> in <listcomp>(.0)
----> 1 df['X'] = [1 if (df.loc[ei,'Close'] > df.loc[ei,'Open']) else 0 for ei in df.index]
2 df.tail()
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1476 raise ValueError("The truth value of a {0} is ambiguous. "
1477 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1478 .format(self.__class__.__name__))
1479
1480 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我想得到这个公式的结果。关闭时为1,条件为false时为0。你知道吗
如果要在Close>;open时在列中放置1,只需使用np.where
第二个解决方案可能是
您可以在列表理解之外进行系列比较,如下所示:
会有用的。序列比较返回具有真/假值的序列。你可以把真值乘以1得到你想要的结果。你知道吗
如果需要更复杂的函数,可以在
df['Close'] > df['Open']
系列中使用.apply
(我将用简单的1/0来显示它,但您可以从中选择它):相关问题 更多 >
编程相关推荐