首页 > 解决方案 > 使用来自 yahoo-> ValueError 的不同股票代码时出错:无法将浮点 NaN 转换为整数

问题描述

ValueError:无法将浮点 NaN 转换为整数。

当我使用 AAPL 美国股票代码时,它可以工作,但是当我更改为 0200.KL (REVENUE.KL) 的大马交易所股票代码时,结果是错误的,为什么?

import datetime
import dateutil
import pandas_datareader.data as wb
from stocktrends import Renko

year=5
tickers ="AAPL"
#tickers="0200.KL" #if I replace AAPL stock tickers with this tickers, error occurs
ohlc = wb.get_data_yahoo(tickers,start=datetime.date.today()-dateutil.relativedelta.relativedelta(years=year),end=datetime.date.today())

def ATR(DF,n):
    "function to calculate True Range and Average True Range"
    df = DF.copy()
    df['H-L']=abs(df['High']-df['Low'])
    df['H-PC']=abs(df['High']-df['Adj Close'].shift(1))
    df['L-PC']=abs(df['Low']-df['Adj Close'].shift(1))
    df['True Range']=df[['H-L','H-PC','L-PC']].max(axis=1,skipna=False)
    df['Average True Range'] = df['True Range'].rolling(n).mean()
    #df2 = df.drop(['H-L','H-PC','L-PC'],axis=1)
    return df["Average True Range"]


def renko_DF(DF):
    "function to convert ohlc data into renko bricks"
    df = DF.copy()
    df.reset_index(inplace=True)
    df = df.iloc[:,[0,1,2,3,5,6]]
    df.rename(columns = {"Date" : "date", "High" : "high","Low" : "low", "Open" : "open","Adj Close" : "close", "Volume" : "volume"}, inplace = True)
    #df.fillna(method="bfill")
    df2 = Renko(df)
    df2.brick_size = round(ATR(DF,120)[-1],0)
    #renko_df = df2.get_bricks() #i get_bricks() does not work try using get_ohlc_data() instead
    renko_df = df2.get_ohlc_data()
    return renko_df

renko_DF(ohlc)

标签: pythonpandas

解决方案


解决了。代码如下:

import datetime
import dateutil
import pandas_datareader.data as wb
from stocktrends import Renko

year=5
tickers ="AAPL"
#tickers="0200.KL" #if I replace AAPL stock tickers with this tickers, error occurs
ohlc = wb.get_data_yahoo(tickers,start=datetime.date.today()-dateutil.relativedelta.relativedelta(years=year),end=datetime.date.today())

def ATR(DF,n):
    "function to calculate True Range and Average True Range"
    df = DF.copy()
    df['H-L']=abs(df['High']-df['Low'])
    df['H-PC']=abs(df['High']-df['Adj Close'].shift(1))
    df['L-PC']=abs(df['Low']-df['Adj Close'].shift(1))
    df['True Range']=df[['H-L','H-PC','L-PC']].max(axis=1,skipna=False)
    df['Average True Range'] = df['True Range'].rolling(n).mean()
    #df2 = df.drop(['H-L','H-PC','L-PC'],axis=1)
    return df["Average True Range"]


def renko_DF(DF):
    "function to convert ohlc data into renko bricks"
    df = DF.copy()
    df.reset_index(inplace=True)
    df = df.iloc[:,[0,1,2,3,5,6]]
    df.rename(columns = {"Date" : "date", "High" : "high","Low" : "low", "Open" : "open","Adj Close" : "close", "Volume" : "volume"}, inplace = True)
    #df.fillna(method="bfill")
    df2 = Renko(df)
    df2.brick_size = round(ATR(DF,120)[-1],2)
    renko_df = df2.get_ohlc_data()
    return renko_df

renko_DF(ohlc)

推荐阅读