Панды: недостающие ценности от Yahoo Finance - PullRequest
0 голосов
/ 28 сентября 2019

Несмотря на мой поиск по этому форуму и другим источникам, я все еще не знаю, как решить эту проблему.

Объясните: я запускал скрипт (ниже) для загрузки цен на все акции в FTSE MIB 40 вДля того, чтобы попробовать лучшие пары.К сожалению, кажется, что при запуске скрипта (уже работающего для других рынков) он сообщает об ошибке для nans или бесконечных значений.Я пытался использовать дропна, но у него все еще есть проблема.Вот весь мой код:

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)

Наконец, один (очень) глупый вопрос: есть идеи, как найти все бесконечные / нан значения в матрице?Спасибо и извините за длинный код

1 Ответ

0 голосов
/ 28 сентября 2019

Чтобы определить количество пропущенных значений в каждом столбце вашего фрейма данных, вы можете выполнить следующее:

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' удалит только строки из вашего фрейма данных, если все значенияв ряду отсутствуют

...