在使用pandas时,loc和iloc让我踩了几次坑。所以在此记录一下二者的区别。
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: d = pd.DataFrame(np.arange(20).reshape(5, 4), columns=list('abcd'))
In [4]: d
Out[4]:
a b c d
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19
In [5]:
1、在取某一列的时候,loc的列参数是列名,而iloc的列参数是该列的索引。例如取b列:
In [5]: d.loc[:, 'b']
Out[5]:
0 1
1 5
2 9
3 13
4 17
Name: b, dtype: int64
In [6]: d.iloc[:, 1]
Out[6]:
0 1
1 5
2 9
3 13
4 17
Name: b, dtype: int64
2、在取某一行的时候,loc的行参数是索引值, 而iloc的行参数是“行号”,第一行的行号就是0,第二行的行号就是1。我们把d倒序一下,然后取第一行就会发现区别:
In [7]: e = d.sort_index(ascending=False)
In [8]: e
Out[8]:
a b c d
4 16 17 18 19
3 12 13 14 15
2 8 9 10 11
1 4 5 6 7
0 0 1 2 3
In [9]: e.loc[0, :]
Out[9]:
a 0
b 1
c 2
d 3
Name: 0, dtype: int64
In [10]: e.iloc[0, :]
Out[10]:
a 16
b 17
c 18
d 19
Name: 4, dtype: int64
可以看到iloc并没有按照索引取行,而是取了第一行。
以上是loc和iloc的两点区别,欢迎补充!