混合位置-标签选择的已弃用.ix方法有哪些替代方法?

4

我想选择特定的行和列,但是由于我的列名不是整数,所以无法使用 .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个回答

2

最简单的方法是:

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 的索引在 pandas 版本0.20.2中已被弃用


谢谢,这个方法非常有效。我还有一个问题,能否使用此方法选择特定的行?比如说,如果我想要选择第1、3和5行以及相同的列呢? - Gary
非常感谢!我刚刚试了一下。现在我很好奇为什么索引括号内还需要另一个方括号? - Gary
1
@Gary 因为它是一个 list,所以索引器接受 list/array 的值按照 那个顺序 提取特定的值,因此请注意当您执行 df.loc[df.index[[2, 0, 4]], "Madrid":"Tokyo"] 或者 df.loc[df.index[[0, 2, 4]], ["Tokyo", "Madrid"]]时会发生什么,但基本上,如果没有方括号,它将意味着多维索引。 - juanpa.arrivillaga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接