【发布时间】:2016-09-18 22:20:20
【问题描述】:
我在尝试从log_returns 矩阵中删除第一行时卡住了。本质上,我想去掉第一行,因为它有 NaN 值。我尝试了isnan(),没有高兴,最后找到了numpy.delete() 听起来最有希望但仍然没有达到目的的方法。
import pandas as pd
from pandas_datareader import data as web
import numpy as np
symbols = ['XOM', 'CVX', 'SLB', 'PXD', 'EOG', 'OXY', 'HAL', 'KMI', 'SE', 'PSX', 'VLO','COP','APC','TSO','WMB','BHI','APA','COG','DVN','MPC','NBL','CXO','NOV','HES','MRO','EQT','XEC','FTI','RRC','OKE','SWN','NFX','HP','MUR','CHK','RIG','DO']
try:
h9 = pd.HDFStore('port.h9')
data = h9['norm']
h9.close()
except:
data = pd.DataFrame()
for sym in symbols:
data[sym] = web.DataReader(sym, data_source='yahoo',
start='1/1/2010')['Adj Close']
data = data.dropna()
h9 = pd.HDFStore('port.h9')
h9['norm'] = data
h9.close()
data.info()
log_returns = np.log(data / data.shift(1))
log_returns.head()
np.delete(log_returns, 0, 0)
上面的最后一行(要删除)引发以下异常,这没有意义,因为row = 0、location = 0 肯定不会超出形状为 (1116,37) 的 log_returns 矩阵的范围)。
ValueError: Shape of passed values is (37, 1115), indices imply (37, 1116)
【问题讨论】:
-
怎么样:
log_returns = log_returns.iloc[1:]? -
np.delete()的第二个参数可能不是你想的那样。如果您只需要扔掉第一行,@MaxU 的建议就是要走的路。此外,np.nan!=np.nan将使np.delete的工作更加困难。 -
MaxU -- iloc 方法很有效!非常感谢。还要感谢 Andras 的回复。
标签: python pandas numpy dataframe