《Python数据分析实战》day2: Pandas中取得某行或者是某列的一点思考

1,734 阅读2分钟

今天看了《Python数据分析实战》这本书的第四章:Pandas的简介的部分,大概看了一半,在实践代码的时候发现了jupyter notebook提示warning,研究了一下有了一些自己的体会。 原作者在写作这本书的时候使用的Pandas版本是0.15.2,而我自己电脑上的Pandas版本是0.20.0一些旧的特性的在新版本的Pandas上并不建议使用,话不多说,先上代码:

>>> import pandas as pd
>>> data = {'colors': ['blue', 'green', 'yellow', 'red', 'white'],
            'object': ['ball', 'pen', 'pencil', 'paper', 'mug'],
            'price': [1.2, 1.0, 0.6, 0.9, 1.7]}
>>> frame = pd.DataFrame(data)
>>> frame
colors object price
0 blue ball 1.2
1 green pen 1.0
2 yellow pencil 0.6
3 red paper 0.9
4 white mug 1.7

现在我想要获取这个frame中的第二行,按照书上说的只需要输入

fram.ix[2]

但是jupyter notebook给出了一个DeprecationWarning虽然能够正常的显示结果:

colors  yellow
object  pencil
price      0.6
Name: 2, dtype: object

但是给出了一个链接和提示:

.ix is deprecated. Please use .loc for label based indexing or .iloc for positional indexing 点进去这个链接我们可以看到,从0.20.0这个版本开始,Pandas不建议使用 .ix 这种方法,而是更倾向于推荐 .loc 方法或者是 .iloc 方法,依然拿我们之前定义的那个frame来做演示,当我想要取得位于colors这一列,第0行和第1行的元素时,应该使用:

>>> frame.loc[[0, 1], 'colors']
0   blue
1   green
Name: colors, dtype: object

类似的,我们也可以使用 .iloc 方法来实现:

>>> frame.iloc[[0, 1], frame.columns.get_loc('colors')]
0   blue
1   green
Name: colors, dtype: object

当我们想要取得多列的时候就应该使用 .get_indexer 方法:

>>> frame.iloc[[0, 1], frame.columns.get_indexer(['colors', 'object', 'price'])]
    colors  object  price
0     blue    ball    1.2
1    green     pen    1.0

更多的有关于 .loc 方法和 .iloc 方法的使用,就要去好好的看一看文档啦!对啦今天的代码在我的Github里可以看到,如果有什么写的不对的地方,请大家不吝赐教,批评指正!