我们有以下小组:
companies = ["GOOG", "YHOO", "AMZN", "MSFT", "AAPL"]
p = data.DataReader(name = companies, data_source="google", start = "2013-01-01", end = "2017-02-22")
我想提取"低"," MSFT"两个日期" 2013-01-02"和" 2013-01-08"。我使用了几个选项,其中一些是有效的,有些则没有。以下是这些方法:
p.ix["Low", [0,4], "MSFT"]
,结果是:
Date
2013-01-02 27.15
2013-01-08 26.46
Name: MSFT, dtype: float64
所以它有效,完全没问题。
p.iloc[2, [0,4], 3]
它也有效。
Date
2013-01-02 27.15
2013-01-08 26.46
Name: MSFT, dtype: float64
p.ix["Low", ["2013-01-02", "2013-01-08"], "MSFT"]
并返回奇怪的结果:
Date
2013-01-02 NaN
2013-01-08 NaN
Name: MSFT, dtype: float64
p.loc["Low", ["2013-01-02", "2013-01-08"], "MSFT"]
这次出现错误
KeyError: "None of [['2013-01-02', '2013-01-08']] are in the [index]"
1和2是有效的,它非常简单。但是,我不明白在第3种方法中获取NaN值的原因以及第4种方法中的错误。
答案 0 :(得分:0)
使用以下
In [116]: wp = pd.Panel(np.random.randn(2, 5, 4), items=['Low', 'High'],
.....: major_axis=pd.date_range('1/1/2000', periods=5),
.....: minor_axis=['A', 'B', 'C', 'D'])
记住这一点很好: .loc使用索引中的标签 .iloc在索引中使用整数定位 .ix尝试像.loc一样,但如果失败则回退到.iloc,所以我们只关注.ix版本 source
如果我wp.ix['Low']
我
A B C D
2000-01-01 -0.864402 0.559969 1.226582 -1.090447
2000-01-02 0.288341 -0.786711 -0.662960 0.613778
2000-01-03 1.712770 1.393537 -2.230170 -0.082778
2000-01-04 -1.297067 1.076110 -1.384226 1.824781
2000-01-05 1.268253 -2.185574 0.090986 0.464095
现在,如果要访问2000-01-01到2000-01-03的数据,则需要使用语法
wp.loc['Low','2000-01-01':'2000-01-03']
返回
A B C D
2000-01-01 -0.864402 0.559969 1.226582 -1.090447
2000-01-02 0.288341 -0.786711 -0.662960 0.613778
2000-01-03 1.712770 1.393537 -2.230170 -0.082778