python - 多索引 Pandas 数据框上的值错误

标签 python python-3.x pandas web-scraping ta-lib

我正在使用来自 here 的包.我想要做的是计算每个股票的随机值。
我有以下代码:

import lxml
from urllib.request import urlopen
from bs4 import BeautifulSoup
import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
# import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
import numpy as np
import ta


html = urlopen('https://en.wikipedia.org/wiki/NIFTY_50')
soup = BeautifulSoup(html,'lxml')
niftylist_raw = soup.find('table', {'class': 'wikitable sortable'})

nifty_symbol =[]

for row in niftylist_raw.findAll('tr')[1:]:
    nifty_symbols = row.findAll('td')[1].text
    nifty_symbol.append(nifty_symbols)
tickerss = nifty_symbol

df = web.DataReader(tickerss, 'yahoo')


stoch1 = ta.momentum.StochasticOscillator(high= df['High'], low = df['Low'], close = df['Close'], n=14, fillna=False)

上面的代码有效,但是当我尝试时:
stoch1.stoch()

它产生以下错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我能做些什么来修复这个错误?

最佳答案

看来方法StochasticOscillator期望时间序列,单列。但是,当您从 web.DataReader 构建数据框时,它为您提供了与股票行情一样多的列。

所以你只需要遍历股票代码,并将输出时间序列附加到一个新的数据帧:

import lxml
from urllib.request import urlopen
from bs4 import BeautifulSoup

import pandas as pd
from pandas_datareader import data as web
import ta

html = urlopen('https://en.wikipedia.org/wiki/NIFTY_50')
soup = BeautifulSoup(html,'lxml')
niftylist_raw = soup.find('table', {'class': 'wikitable sortable'})

tickers = []

for row in niftylist_raw.findAll('tr')[1:]:
    nifty_symbols = row.findAll('td')[1].text
    tickers.append(nifty_symbols)

print(tickers)

df = web.DataReader(tickers, 'yahoo')

stoch_list = pd.DataFrame(columns = tickers, index = df.index)

for t in tickers:
    stoch1 = ta.momentum.StochasticOscillator(
        high = df['High'][t], 
        low = df['Low'][t], 
        close = df['Close'][t], 
        n = 14, 
        fillna = True
    )
    stoch_list[t] = stoch1.stoch()

print(stoch_list)

输出 :
            ADANIPORTS.NS  ASIANPAINT.NS  AXISBANK.NS  BAJAJ-AUTO.NS  BAJFINANCE.NS  BAJAJFINSV.NS  BHARTIARTL.NS  ...   TECHM.NS   TITAN.NS  ULTRACEMCO.NS     UPL.NS    VEDL.NS   WIPRO.NS    ZEEL.NS
Date                                                                                                               ...                                                                                 
2015-06-15      21.909922       9.347667    48.704666      91.231693      77.791892      44.191114      30.140809  ...  53.666585  13.368975      14.346124  11.691838  14.367821  56.043549  91.428571
2015-06-16      72.363725      45.265156    74.247676      91.487233      66.564368      40.100098      55.669462  ...  36.333415  64.983097      88.990210  40.529881  21.072792  52.328376  87.301587
2015-06-17      56.363636      66.856091    53.025895      75.153149      91.088110      50.700195      85.667732  ...  21.000163  91.388957      80.205145  86.905950   3.869011  66.513717  92.325610
2015-06-18      56.363636      86.940831    57.636766      89.124719      94.661550      60.670907      71.193579  ...   5.263327  92.608643      78.613103  60.171097   7.142838  84.943018  70.000000
2015-06-19      11.428615      90.558724    66.282281      89.443078      86.336954      60.956522      88.276724  ...  19.378201  87.341779      81.569343  47.826973  22.928220  64.704798  39.333360
...                   ...            ...          ...            ...            ...            ...            ...  ...        ...        ...            ...        ...        ...        ...        ...
2020-06-08      91.351874      57.958253    87.042001      82.309507      94.710350      94.247354      60.630541  ...  90.171597  89.217165      71.472360  88.654333  75.702800  98.275850  78.462774
2020-06-09      88.169607      59.439045    77.926708      79.988254      86.386837      85.820652      35.190610  ...  79.905597  77.139145      68.528865  83.201404  73.694768  80.155220  70.400641
2020-06-10      89.285678      55.534959    84.539778      62.649461      85.347188      80.135976      38.385475  ...  84.417652  65.700137      64.559014  73.540428  79.718864  76.537583  64.615390
2020-06-11      71.651770      29.268271    72.028606      62.966014      72.695166      75.927493      15.018624  ...  64.094315  53.441767      41.152918  62.931034  59.437760  65.384598  40.940166
2020-06-12      85.508938      35.945931    66.097784      77.878054      87.243356      84.211742      37.430114  ...  45.712787  62.894536      53.112690  54.729316  68.473904  53.365369  17.986311

[1228 rows x 50 columns]

关于python - 多索引 Pandas 数据框上的值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62313754/

相关文章:

python - 无法从 Jupyter 中的 Python 笔记本导入模块

python - 为什么拆包会以元组形式给出结果

python - 从一列列表中提取值

python - 使用 ctypes 将 2d numpy 数组传递给 c

python - 如何将列表转换为数据框矩阵

python - 如何使用 Beautiful Soup 收集元素?

python - 使用矢量化 pandas 函数将多个项目添加到行,而不是 iterrows?

python - 如何使用 python HTTPServer 返回 ajax 响应?

python - 什么是使元组列表中的元素在python中唯一的有效方法?

python - Pandas 将数据帧与包含日期时间的系列进行比较