¿Por qué recibo el mensaje de “dataframe vacío” al usar concat?
Estoy tratando de ver el precio predicho para MSFT y me refiero a un libro titulado ‘Machine learning and data science blueprints for finance’. Proporciona un código de ejemplo como un estudio de caso para determinar el precio futuro de las acciones de MSFT. El código está abajo. Sin embargo, cuando comienzo a depurarlo, la terminal muestra el siguiente mensaje:
Empty DataFrame
Columns: [MSFT_pred, GOOGL, DEXJPUS, DEXUSUK, SP500, DJIA, VIXCLS, MSFT_DT, MSFT_3DT,
MSFT_6DT, MSFT_12DT]
El código está abajo:
from pandas_datareader import data
import yfinance as yf
import pandas_datareader as web
import numpy as np
import pandas as pd
return_period = 5
stk_tickers = ['MSFT','AAPL','GOOGL']
stk_data = yf.download(stk_tickers, start = '2012-01-01', end='2017-01-01')
ccy_tickers = ['DEXJPUS','DEXUSUK']
ccy_data = web.DataReader(ccy_tickers,'fred')
idx_tickers = ['SP500','DJIA','VIXCLS']
idx_data = web.DataReader(idx_tickers,'fred')
Y = np.log(stk_data.loc[:, ('Adj Close', 'MSFT')]).diff(return_period).shift(-
return_period)
Y.name = Y.name[-1]+'pred';
X1 = np.log(stk_data.loc[:, ('Adj Close', ('GOOGL', 'IBM'))]).diff(return_period)
X1.columns = X1.columns.droplevel()
X2 = np.log(ccy_data).diff(return_period)
X3 = np.log(idx_data).diff(return_period)
X4 = pd.concat([np.log(stk_data.loc[:, ('Adj Close', 'MSFT')]).diff(i) for i in
[return_period, return_period*3, return_period*6, return_period*12]],
axis=1).dropna()
X4.columns = ['MSFT_DT', 'MSFT_3DT', 'MSFT_6DT', 'MSFT_12DT']
X = pd.concat([X1, X2, X3, X4], axis=1)
dataset = pd.concat([Y, X], axis=1).dropna().iloc[::return_period, :]
Y = dataset.loc[:, Y.name]
X = dataset.loc[:, X.columns]
print(dataset)
Sé que los datos están presentes porque cuando imprimo ‘X’ o ‘Y’ aparecen con ellos. Debe ser un problema con concat
.
davy.ai
Según el código proporcionado, parece que el problema podría estar en la concatenación de los dataframes. Específicamente, el dataframe
X4
se está concatenando conX
utilizandopd.concat
, y luego se aplica la funcióndropna()
a esa concatenación. Sin embargo, es posible queX4
tenga algunos valores faltantes que no se están manejar correctamente.Una forma de probar esta hipótesis es imprimir
X4
y verificar si hay valores faltantes en el dataframe. Si los hay, podrían ser la causa del problema con la concatenación.Otra opción sería probar quitar la función
dropna()
de la concatenación deX
yX4
y ver si eso resuelve el problema. Esto mantendría cualquier valor faltante presente en el dataframe y evitaría que se imprima un dataframe vacío.En general, es difícil determinar la causa exacta del problema sin más información o pruebas adicionales, pero estas son algunas posibles vías a explorar.