尽管我通过该论坛和其他来源进行搜索,但我仍然不知道如何解决此问题。
说明:我正在运行一个脚本(如下),该文件用于下载FTSE MIB 40中所有股票的价格,以便尝试最佳的协整货币对。不幸的是,似乎在运行脚本时(已在其他市场使用),它报告nans
或无限值错误。我尝试使用dropna,但仍然有问题。这是我的整个代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels
from statsmodels.tsa.stattools import coint
from statsmodels.tsa.stattools import adfuller
import yfinance as yf
import pandas_datareader as pdr
import seaborn
ftse_mib40=['A2A.MI','AMP.MI','ATL.MI','AZM.MI','BAMI.MI','BPE.MI','BZU.MI','CPR.MI','CNHI.MI','DIA.MI','ENEL.MI','ENI.MI','EXO.MI','RACE.MI','FCA.MI','FBK.MI','G.MI','HER.MI','ISP.MI','IG.MI','JUVE.MI','LDO.MI','MB.MI','MONC.MI','NEXI.MI','NXEN','PIRC.MI','PST.MI','PRY.MI','REC.MI','SPM.MI','SFER.MI','SRG.MI','STM.MI','TIT.MI','TEN.MI','TRN.MI','UBI.MI','UCG.MI','UNI.MI','US.MI']
ftse_yah=pdr.get_data_yahoo(ftse_mib40,start='2017-01-01',end='2019-09-27')
ftse_matrix=ftse_yah['Adj Close']
ftse_matrix=ftse_matrix.replace([np.inf, -np.inf], np.nan).dropna(how='all')
def find_cointegrated_pairs(data):
n = data.shape[1]#cioè numero colonne
score_matrix = np.zeros((n, n))
pvalue_matrix = np.ones((n, n))
keys = data.keys()
pairs = []
for i in range(n):
for j in range(i+1, n):
S1 = data[keys[i]]
S2 = data[keys[j]]
result = coint(S1, S2)
score = result[0]
pvalue = result[1]
score_matrix[i, j] = score
pvalue_matrix[i, j] = pvalue
if pvalue < 0.02:
pairs.append((keys[i], keys[j]))
return score_matrix, pvalue_matrix, pairs
tstat,pv,coppie=find_cointegrated_pairs(ftse_matrix)
最后一个(非常)愚蠢的问题:知道如何在矩阵中定位所有无限/ nan值吗?谢谢,抱歉,代码很长
答案 0 :(得分:0)
要确定数据框各列中缺失值的数量,可以运行以下命令
pd.isnull(ftse_matrix).sum()
您将看到ftse_matrix
要丢弃它们,请替换
ftse_matrix=ftse_matrix.replace([np.inf, -np.inf], np.nan).dropna(how='all')
与此
ftse_matrix=ftse_matrix.dropna()
对于dropna,参数how='all'
仅在缺少行中所有值的情况下才会从数据框中删除行