为什么我在使用 concat 时收到 Empty Dataframe 消息
Why am I getting Empty Dataframe message when using concat
我正在尝试查看 MSFT 的预测价格,我指的是一本名为 'Machine learning and data science blueprints for finance' 的书。它提供了一个示例代码作为案例研究,以确定 MSFT 的未来股票价格。代码如下。但是,当我开始调试它时,终端显示以下消息
Empty DataFrame
Columns: [MSFT_pred, GOOGL, DEXJPUS, DEXUSUK, SP500, DJIA, VIXCLS, MSFT_DT, MSFT_3DT,
MSFT_6DT, MSFT_12DT]
代码如下
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)
我知道数据存在,因为当我打印 'X' 或 'Y' 时,它会显示出来。一定是 concat
.
的问题
这是因为您删除了所有包含 NaN
的行。你应该更换
dataset = pd.concat([Y, X], axis=1).dropna().iloc[::return_period, :]
和
dataset = pd.concat([Y, X], axis=1).iloc[::return_period, :]
哪个returns:
MSFT_pred GOOGL DEXJPUS DEXUSUK SP500 DJIA VIXCLS MSFT_DT \
2012-01-03 0.04 NaN NaN NaN NaN NaN NaN NaN
2012-01-10 0.01 -0.07 NaN NaN NaN NaN NaN NaN
2012-01-18 0.05 0.02 NaN NaN NaN NaN NaN NaN
2012-01-25 0.01 -0.11 NaN NaN NaN NaN NaN NaN
2012-02-01 0.03 0.02 NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ...
2021-11-23 NaN NaN 0.00 -0.00 -0.00 -0.01 0.17 NaN
2021-11-30 NaN NaN -0.02 -0.01 -0.03 -0.04 0.34 NaN
2021-12-07 NaN NaN 0.00 -0.00 0.03 0.04 -0.22 NaN
2021-12-14 NaN NaN 0.00 -0.00 -0.01 -0.00 0.00 NaN
2021-12-21 NaN NaN NaN NaN 0.00 -0.00 NaN NaN
MSFT_3DT MSFT_6DT MSFT_12DT
2012-01-03 NaN NaN NaN
2012-01-10 NaN NaN NaN
2012-01-18 NaN NaN NaN
2012-01-25 NaN NaN NaN
2012-02-01 NaN NaN NaN
... ... ... ...
2021-11-23 NaN NaN NaN
2021-11-30 NaN NaN NaN
2021-12-07 NaN NaN NaN
2021-12-14 NaN NaN NaN
2021-12-21 NaN NaN NaN
[512 rows x 11 columns]
之后做家务。
我正在尝试查看 MSFT 的预测价格,我指的是一本名为 'Machine learning and data science blueprints for finance' 的书。它提供了一个示例代码作为案例研究,以确定 MSFT 的未来股票价格。代码如下。但是,当我开始调试它时,终端显示以下消息
Empty DataFrame
Columns: [MSFT_pred, GOOGL, DEXJPUS, DEXUSUK, SP500, DJIA, VIXCLS, MSFT_DT, MSFT_3DT,
MSFT_6DT, MSFT_12DT]
代码如下
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)
我知道数据存在,因为当我打印 'X' 或 'Y' 时,它会显示出来。一定是 concat
.
这是因为您删除了所有包含 NaN
的行。你应该更换
dataset = pd.concat([Y, X], axis=1).dropna().iloc[::return_period, :]
和
dataset = pd.concat([Y, X], axis=1).iloc[::return_period, :]
哪个returns:
MSFT_pred GOOGL DEXJPUS DEXUSUK SP500 DJIA VIXCLS MSFT_DT \
2012-01-03 0.04 NaN NaN NaN NaN NaN NaN NaN
2012-01-10 0.01 -0.07 NaN NaN NaN NaN NaN NaN
2012-01-18 0.05 0.02 NaN NaN NaN NaN NaN NaN
2012-01-25 0.01 -0.11 NaN NaN NaN NaN NaN NaN
2012-02-01 0.03 0.02 NaN NaN NaN NaN NaN NaN
... ... ... ... ... ... ... ... ...
2021-11-23 NaN NaN 0.00 -0.00 -0.00 -0.01 0.17 NaN
2021-11-30 NaN NaN -0.02 -0.01 -0.03 -0.04 0.34 NaN
2021-12-07 NaN NaN 0.00 -0.00 0.03 0.04 -0.22 NaN
2021-12-14 NaN NaN 0.00 -0.00 -0.01 -0.00 0.00 NaN
2021-12-21 NaN NaN NaN NaN 0.00 -0.00 NaN NaN
MSFT_3DT MSFT_6DT MSFT_12DT
2012-01-03 NaN NaN NaN
2012-01-10 NaN NaN NaN
2012-01-18 NaN NaN NaN
2012-01-25 NaN NaN NaN
2012-02-01 NaN NaN NaN
... ... ... ...
2021-11-23 NaN NaN NaN
2021-11-30 NaN NaN NaN
2021-12-07 NaN NaN NaN
2021-12-14 NaN NaN NaN
2021-12-21 NaN NaN NaN
[512 rows x 11 columns]
之后做家务。