Pandas的基本數據結構是Series(數組)和DataFrame(類似二維數組),Pandas 提供了 Index 對象,每個 Series 都會帶有一個對應的Index,用來標記不同的元素,Index 的內容不一定是數字,也可以是字母、中文等,它類似於SQL中的主鍵
當我們只想取數據中的各別行或列,可以用.loc .iloc .ix來實現:
1.loc意義:通過行標籤索引行數據
loc[n]表示索引的是第n行(index是整數)
loc[‘n’]表示索引的是第‘n’行(index是字符)
2.iloc意義:通過行號獲取行數據
3.ix:結合前兩種的混合索引
三者區別
- ix / loc 可以通過行號和行標籤進行索引,比如 df.loc[‘a’] , df.loc[1], df.ix[‘a’] , df.ix[1](這裏的‘a’是行標籤)
- iloc只能通過行號索引 , df.iloc[0] 是對的, 而df.iloc[‘a’] 是錯誤的
- .ix[0:n,列名]或.loc[0:n,列名]取數據時,是可以取到index=n這列的,因爲此時0:n指的不是下標,而是index的名稱。而iloc[0:n,列名]只能取到前n行,也就是index=n-1的行。
建議:當用行號索引的時候, 儘量用 iloc 來進行索引; 而用標籤索引的時候用 loc , ix 儘量別用。
代碼示例:
import pandas as pd
filename='ratings.csv'
data=pd.read_csv(filename,names=['user_id','movie_id','rating','time'], sep='::', engine='python')
#數據集爲movielens-1M中的ratings.csv數據
data_test1=data.iloc[:,:2] #選取位置爲[0,2)列的整列數據
data_test2=data.iloc[0:5,1] #選取位置爲1的列的[0,5)行的數據
data_test3=data.loc[0:2,'movie_id'] #選取列名爲‘movie_id’的[0,2]行的數據
#loc[M:N,m:n]表示取M:N行的m到n-l列的數據
print('-------打印data_test1----------')
print(data_test1)
print('-------打印data_test2-------------------')
print(data_test2)
print('-------打印data_test3----------------------------')
print(data_test3)
輸出結果:
-------打印data_test1----------
user_id movie_id
0 1 1193
1 1 661
2 1 914
3 1 3408
4 1 2355
... ... ...
1000204 6040 1091
1000205 6040 1094
1000206 6040 562
1000207 6040 1096
1000208 6040 1097
[1000209 rows x 2 columns]
-------打印data_test2-------------------
0 1193
1 661
2 914
3 3408
4 2355
Name: movie_id, dtype: int64
-------打印data_test3----------------------------
0 1193
1 661
2 914
Name: movie_id, dtype: int64