使用Float64Index的索引切片在pandas中不起作用

时间:2014-10-08 16:14:06

标签: python pandas

我有以下数据框

             p12Diff
Pump Time           
3    -2.90 -0.000919
     -2.89 -0.000795
     -2.88 -0.000814
     -2.87 -0.000700
     -2.86 -0.000847
     -2.85 -0.000769
     -2.84 -0.000681
     -2.83 -0.000888
     -2.82 -0.000815
     -2.81 -0.000764
     -2.80 -0.000879
     -2.70 -0.000757
     -2.60 -0.000758
     -2.50 -0.000707

奇怪的是,当我用idx=IndexSlice切片某些范围时,我得到一个KeyError,而对于其他人,它只是有效。例如,df.loc[idx[:,-2.90:-2.52],:]削减为-2.60,而df.loc[idx[:,-2.90:-2.62],:]则提升KeyError: -2.62

这可能是个错误吗?

1 个答案:

答案 0 :(得分:1)

这是固定为0.15.0(RC1现在已经出局),请参见此处:http://pandas.pydata.org/。 0.14.1对于这种类型的索引有点麻烦。

In [13]: df = DataFrame({'value' : np.arange(11)},index=pd.MultiIndex.from_product([[1],np.linspace(-2.9,-2.3,11)]))

In [14]: df
Out[14]: 
         value
1 -2.90      0
  -2.84      1
  -2.78      2
  -2.72      3
  -2.66      4
  -2.60      5
  -2.54      6
  -2.48      7
  -2.42      8
  -2.36      9
  -2.30     10

In [15]: idx = pd.IndexSlice

In [16]: df.loc[idx[:,-2.9:-2.42],]
Out[16]: 
         value
1 -2.90      0
  -2.84      1
  -2.78      2
  -2.72      3
  -2.66      4
  -2.60      5
  -2.54      6
  -2.48      7
  -2.42      8

In [17]: df.loc[idx[:,-2.9:-2.52],]
Out[17]: 
         value
1 -2.90      0
  -2.84      1
  -2.78      2
  -2.72      3
  -2.66      4
  -2.60      5
  -2.54      6

In [18]: df.loc[idx[:,-2.84:-2.52],]
Out[18]: 
         value
1 -2.84      1
  -2.78      2
  -2.72      3
  -2.66      4
  -2.60      5
  -2.54      6

In [19]: df.loc[idx[:,-2.85:-2.52],]
Out[19]: 
         value
1 -2.84      1
  -2.78      2
  -2.72      3
  -2.66      4
  -2.60      5
  -2.54      6