使用pandas_ta计算BTC/USDT的EMA50全为None,数据量足够却异常
问题:计算BTC/USDT的EMA50列全为None值的原因及解决办法
我使用以下代码调用Binance API,获取BTC/USDT的最近200条1d K线数据,并尝试在DataFrame中生成EMA50列:
client = Client('PUBLIC_KEY', 'PRIVATE_KEY') client.API_URL = 'https://testnet.binance.vision/api' #obtain historical data for indicator calculation klines = client.get_historical_klines('BTCUSDT', '1d', limit=200) klines = np.array(klines) #convert bars to df df = pd.DataFrame(klines.reshape(-1,12),dtype=float, columns = ('Open Time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close time', 'Quote asset volume', 'Number of trades', 'Taker buy base asset volume', 'Taker buy quote asset volume', 'Ignore')) df['Open Time'] = pd.to_datetime(df['Open Time'], unit='ms') #run indicators df['ema50'] = ta.ema(df['Close'], length=50)尽管拥有足够计算EMA的数据量,但生成的DataFrame列中全为None值,请问我哪里操作出错了?
解决办法
检查
ta库的参数匹配问题:不同技术分析库的EMA函数参数名不同。如果使用的是ta包(technical-analysis-library),它的EMA函数参数是window而非length,修改代码为:df['ema50'] = ta.ema(df['Close'], window=50)若使用的是
pandas-ta库,正确调用方式为df.ta.ema(length=50),或者ta.ema(df['Close'], length=50),需确保库版本和调用方式匹配。验证
Close列的数据有效性:执行print(df['Close'].isnull().sum())检查是否存在空值,若有缺失值,先通过df['Close'].fillna(method='ffill')等方式填充后再计算EMA。确认数据类型正确性:虽然代码中已指定
dtype=float,仍可通过print(df['Close'].dtype)验证Close列是否为数值类型,非数值类型会导致EMA计算失败返回空值。
内容的提问来源于stack exchange,提问作者ZeusX
相关产品推荐
相关产品推荐

