python - 如何修复比较简单数据后生成的Python中的 'The truth value of a Series is ambiguous'

标签 python python-3.x pandas

从雅虎获取比特币(BTC-USD)的数据后,我尝试创建一个新列来显示收盘价是否高于每天的开盘价。

我想要做的是创建一个列,当收盘价高于开盘价时显示 1。当条件不成立时为 0。

当我尝试比较收盘价和开盘价时,我收到下一条消息:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

我已经尝试了几种方法来修复它(例如将数据作为 CSV 导入,而不是直接从 Yahoo 导入),但不幸的是我找不到解决方案。

下面您可以看到我正在使用的代码:

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。

最佳答案

如果您想在关闭 > 打开时将 1 放入列中,只需使用 np.where

import numpy as np
df['X'] = np.where(df['Close']>df['Open'],1,0)

第二个解决方案可能是

df['X'] = 0
df.loc[df['Close']>df['Open'],"X"] = 1
print(df)
                 High   Low          Open       Close        Volume     Adj Close   X
Date                            
2014-12-31  319.089996  308.890015  311.269989  318.239990  6472822    318.239990   1
2015-01-01  321.359985  313.540009  318.239990  314.890015  4073067    314.890015   0
2015-01-02  316.399994  313.079987  314.890015  315.209991  4673971    315.209991   1
2015-01-03  315.829987  284.890015  315.209991  287.130005  14209564    287.130005  0
2015-01-04  289.940002  255.869995  287.130005  264.720001  24255392    264.720001  0

关于python - 如何修复比较简单数据后生成的Python中的 'The truth value of a Series is ambiguous',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57023563/

相关文章:

python-3.x - 使用过去可以通过 pip 安装但现在不能安装的库 (ocrodjvu)?

python - 使用 pandas get_loc 更有效的方法?

python - 为什么我在 python 上收到列表对象不可调用错误?

python - 用于拼写检查多个文档并报告结果的脚本

Python 从嵌套列表中最小数量的重复值创建列表

python-3.x - 将图像数据集拆分为训练测试数据集

python - 转置除一列时间戳之外的数据帧

python - 如何使用 Neupy 获取神经元表示的点

python - 我怎样才能让我的 gradle 测试任务对不在 maven central 上的库使用 python pip install?

python - 正则表达式中([^,]*)和(.*,)的区别?使用Python