今天看了《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里可以看到,如果有什么写的不对的地方,请大家不吝赐教,批评指正!