对于基于混合位置标签的选择,弃用.ix的替代方法是什么?

时间:2017-08-07 20:28:59

标签: python pandas

我正在尝试选择特定的行和列,但它不允许我使用.iloc.loc,因为我的列名不是整数。

            Madrid  Boston  Tokyo  Shanghai  Kolkota
2014-01-01     -16      22     49       -24       40
2014-01-02     -49      -7     45         2       -6
2014-01-03     -24      41    -22       -11        0
2014-01-04     -28     -14     -2        20       28
2014-01-05     -49      15    -40        -2        3

使用.ix我能够做到这一点:

df.ix[1:5, 'Madrid':'Tokyo']
            Madrid  Boston  Tokyo
2014-01-02     -49      -7     45
2014-01-03     -24      41    -22
2014-01-04     -28     -14     -2
2014-01-05     -49      15    -40

现在不推荐使用.ix,有什么替代方案?

1 个答案:

答案 0 :(得分:3)

快速简便的方法是:

df.loc[df.index[1:5], "Madrid":"Tokyo"]

所以,例如:

>>> df = pd.DataFrame(np.random.randint(-50,50,(5,5)), index=pd.date_range("2014-01-01", "2014-01-05"), columns=['Madrid', 'Boston', 'Tokyo', 'Shanghai', 'Kolkota'])
>>> df
            Madrid  Boston  Tokyo  Shanghai  Kolkota
2014-01-01     -16      22     49       -24       40
2014-01-02     -49      -7     45         2       -6
2014-01-03     -24      41    -22       -11        0
2014-01-04     -28     -14     -2        20       28
2014-01-05     -49      15    -40        -2        3
>>> df.loc[df.index[1:5], "Madrid":"Tokyo"]
            Madrid  Boston  Tokyo
2014-01-02     -49      -7     45
2014-01-03     -24      41    -22
2014-01-04     -28     -14     -2
2014-01-05     -49      15    -40

您可以使用相同的方法选择特定行,因此如果您想要第0,第2和第4行(第一,第三和第五):

>>> df.loc[df.index[[0, 2, 4]], "Madrid":"Tokyo"]
            Madrid  Boston  Tokyo
2014-01-01     -16      22     49
2014-01-03     -24      41    -22
2014-01-05     -49      15    -40

注意

这不是Python 2与Python 3的关系,而是与pandas版本有关,基于.ix的索引为deprecated in pandas version 0.20.2