Pandas中同时使用loc和iloc
在本文中,我们将介绍在Pandas中同时使用loc和iloc定位数据的方法以及适合使用它们的场合。Pandas是Python中一个重要的数据分析和操作工具,loc和iloc是其中两个最重要的方法之一。
阅读更多:Pandas 教程
loc和iloc方法的介绍
- loc:通过行标签/列标签进行访问
- iloc:通过行/列的位置(从0开始)进行访问
我们先来看一下loc方法。它可以通过DataFrame对象中的行标签/列标签进行单个访问,格式如下:
df.loc[row_indexer,column_indexer]
其中,row_indexer可以是以下情况之一:
- 单个标签
- 标签列表或数组
- 切片对象
- 布尔数组
而column_indexer可以是以上同样的情况(注意:此处行标签/列标签都要使用完整的标签,不能使用切片等方式)。举个例子:
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]},index=list('abc'))
print(df.loc['a',['B','C']])
输出结果:
B 4
C 7
Name: a, dtype: int64
iloc方法基本和loc一样,只是使用的是行/列位置(从0开始)。举个例子:
import pandas as pd
df = pd.DataFrame({'A':[1,2,3],'B':[4,5,6],'C':[7,8,9]},index=list('abc'))
print(df.iloc[0,[1,2]])
输出结果:
B 4
C 7
Name: a, dtype: int64
以上就是loc和iloc最基本的用法。现在我们来看看如何在代码中同时使用这两个方法。
使用loc和iloc定位数据
使用loc和iloc方法可以访问DataFrame、Series对象中的行/列数据,而我们在实际操作中理论上可以使用其中的任意一个方法定位数据。接下来我们将具体介绍如何在操作中同时使用它们。
按标签/位置访问行/列
如果我们想要通过行标签和列标签同时访问一些行/列的数据,我们可以使用如下方法:
df.loc[row_indexer,column_indexer].iloc[row_indexer2,column_indexer2]
这里需要注意的是,第一个方括号内的行/列标签使用loc访问,而第二个方括号内的位置则使用iloc方法访问。
下面我们来举一个例子。首先我们建立一个DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(6).reshape(3, 2), index=['a', 'b', 'c'], columns=['I', 'II'])
print(df)
输出结果:
I II
a 0 1
b 2 3
c 4 5
接下来我们来选择其中的数据:
print(df.loc[['a', 'b'], :].iloc[:, [1]])
这里我们使用loc索引行标签为a,b的行,iloc索引第二列,输出结果:
II
a 1
b 3
按位置访问行/列
类似的,如果我们想要按位置访问行/列的数据,可以使用如下方法:
df.iloc[row_indexer,column_indexer].loc[row_indexer2,column_indexer2]
这里我们使用了iloc方法访问行/列位置,再使用loc方法访问某些行/列的标签。这种方法可以解决一些难以用loc或iloc单独访问的数据。
还是举个例子,我们随便造一个DataFrame:
import pandas as pd
import numpydf = pd.DataFrame(np.arange(12).reshape(4, 3), index=[1, 2, 4, 7], columns=['A', 'B', 'C'])
print(df)
输出结果:
A B C
1 0 1 2
2 3 4 5
4 6 7 8
7 9 10 11
我们可以使用如下代码来访问其第二和第四行,并且只选择其第一列和第二列:
print(df.iloc[[1, 3], :].loc[:, ['A', 'B']])
输出结果:
A B
2 3 4
7 9 10
我们使用iloc方法选择第二和第四行,再使用loc方法选择第一和第二列。
适合使用loc和iloc的场合
loc和iloc方法各有其适用的场合:
- 使用loc:如果我们需要访问某一范围内的数据,建议使用loc方法,因为loc方法比iloc更容易理解,同时也更灵活。
- 使用iloc:当我们需要访问某些具体的数据而不是范围内的数据时,建议使用iloc方法,因为iloc方法比loc更快。
当然,如果一个任务非常简单,两种方法都可以。
总结
本文介绍了在Pandas中同时使用loc和iloc方法,以及适合使用它们的场合。通过本文我们学习了如何在代码中同时使用这两个方法,以及如何按标签/位置访问行/列,按位置访问行/列。同时,我们也了解到,当我们需要访问某一范围内的数据时建议使用loc方法,而需要访问某些具体的数据而不是范围内的数据时建议使用iloc方法。