python pandas.DataFrame選取、修改數據最好用.loc,.iloc,.ix

相信很多人像我一樣在學習python,pandas過程中對數據的選取和修改有很大的困惑(也許是深受Matlab)的影響。。。

到今天終於完全搞清楚了!!!

先手工生出一個數據框吧

[python] view plain copy

import numpy as np  
import pandas as pd  
df = pd.DataFrame(np.arange(0,60,2).reshape(10,3),columns=list('abc'))  

df 是這樣子滴

那麼這三種選取數據的方式該怎麼選擇呢?

一、當每列已有column name時,用 df [ 'a' ] 就能選取出一整列數據。如果你知道column names 和index,且兩者都很好輸入,可以選擇 .loc

[python] view plain copy

df.loc[0, 'a']  
df.loc[0:3, ['a', 'b']]  
df.loc[[1, 5], ['b', 'c']]  

由於這邊我們沒有命名index,所以是DataFrame自動賦予的,爲數字0-9

二、如果我們嫌column name太長了,輸入不方便,有或者index是一列時間序列,更不好輸入,那就可以選擇 .iloc了。這邊的 i 我覺得代表index,比較好記點。

[python] view plain copy

df.iloc[1,1]  
df.iloc[0:3, [0,1]]  
df.iloc[[0, 3, 5], 0:2]  

iloc 使得我們可以對column使用slice(切片)的方法對數據進行選取。

三、.ix 的功能就更強大了,它允許我們混合使用下標和名稱進行選取。 可以說它涵蓋了前面所有的用法。基本上把前面的都換成df.ix 都能成功,但是有一點,就是

df.ix [ [ ..1.. ], [..2..] ], 1框內必須統一,必須同時是下標或者名稱,2框也一樣。 BTW, 1框是用來指定row,2框是指定column, 當然上面所有的取數方法都是這個規則。

這就是我目前的領悟吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章