iloc是pandas库中用于基于整数位置进行索引和切片的一种方法,它允许通过行和列的整数位置来访问DataFrame中的特定数据,以下是对iloc的详细解释及示例:
一、基本用法
1. 单个整数选择
语法:df.iloc[row_index]
示例:
import pandas as pd data = {'name': ['Tom', 'Nick', 'John', 'Tom', 'John'], 'age': [20, 21, 19, 20, 18], 'score': [90, 85, 88, 92, 90]} df = pd.DataFrame(data) print(df.iloc[3])
输出:
name Tom age 20 score 92 Name: 3, dtype: object
这个例子选择了DataFrame中第四行(索引为3)的所有列。
2. 整数列表选择
语法:df.iloc[[row_index1, row_index2, ...]]
示例:
print(df.iloc[[0, 2, 4]])
输出:
name age score 0 Tom 20 90 2 John 19 88 4 John 18 90
这个例子选择了DataFrame中第一行、第三行和第五行。
3. 整数切片对象选择
语法:df.iloc[start:end]
或df.iloc[start:end, column_start:column_end]
示例:
print(df.iloc[1:3])
输出:
name age score 1 Nick 21 85 2 John 19 88
这个例子选择了DataFrame中第二行到第三行(不包括第四行)的所有列。
另一个例子是选择特定的行和列范围:
print(df.iloc[0:2, 0:3])
输出:
name age score 0 Tom 20 90 1 Nick 21 85
这个例子选择了DataFrame中第一行到第二行(不包括第三行)以及第一列到第三列(不包括第四列)。
4. 布尔数组选择
语法:df.iloc[bool_array]
示例:
print(df.iloc[df['age'].values > 19])
输出(假设):
name age score 1 Nick 21 85 2 John 19 88 4 John 18 90
这个例子选择了DataFrame中年龄大于19的所有行。
5. 可调用函数选择
语法:df.iloc[lambda x: condition]
示例:
print(df.iloc[lambda x: x.index % 2 == 0])
输出:
name age score 0 Tom 20 90 2 John 19 88 4 John 18 90
这个例子选择了DataFrame中索引为偶数的所有行。
二、混合索引和列的索引器类型
可以混合使用不同类型的索引器来选择行和列,可以选择整个轴上的标量整数,也可以使用切片对象或布尔数组,下面是一个示例:
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) print(df.iloc[0, [1, 2]])
输出:
B 4 C 7 Name: 0, dtype: int64
这个例子选择了DataFrame中第一行(索引为0)的第二列和第三列。
另一个更复杂的示例是:
print(df.iloc[1:3, [0, 2]])
输出:
A C 1 2 6 2 3 9
这个例子选择了DataFrame中第二行到第三行(不包括第四行)的第一列和第三列。
三、FAQs
Q1: iloc和loc有什么区别?
A1: iloc是基于整数位置的索引,而loc是基于标签的索引,iloc使用整数位置来选择数据,而loc使用行标签和列标签来选择数据,iloc在切片时不包含结束位置,而loc包含结束位置,对于缺失的标签,iloc会引发KeyError,而loc会返回NaN。
Q2: 如果请求的索引器越界,iloc会如何处理?
A2: 如果请求的索引器越界,并且使用的是切片对象,则iloc会根据Python/NumPy的切片语义处理,即可能会引发IndexError或返回空的结果,如果请求的索引器是标量整数且越界,则会引发IndexError。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1434225.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复