DataFrame.iloc
纯粹基于整数位置的索引,用于按位置选择。
.iloc[]
主要是基于整数位置(从轴的0到长度-1),但也可以与布尔数组一起使用。
允许的输入:
- 整数, 例如,
5
- 整数的列表或数组, 例如,
[4, 3, 0]
- 带有整数的切片对象, 例如,
1:7
- 布尔数组
- 具有一个参数(调用Series,DataFrame或Panel)的可调用函数,它返回索引的有效输出(上述之一)。 当您没有对调用对象的引用但希望将选择基于某个值时,这在方法链中很有用。
.iloc
如果请求的索引器超出范围,将引发IndexError,除了允许越界索引的切片索引器(这符合python / numpy切片语义)。
请参阅ref:按位置选择<indexing.integer>
例子,
>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4}, ... {'a': 100, 'b': 200, 'c': 300, 'd': 400}, ... {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }] >>> df = pd.DataFrame(mydict) >>> df a b c d 0 1 2 3 4 1 100 200 300 400 2 1000 2000 3000 4000
1)仅对行进行索引
带标量整数
>>> type(df.iloc[0]) <class 'pandas.core.series.Series'> >>> df.iloc[0] a 1 b 2 c 3 d 4 Name: 0, dtype: int64
带有整数列表
>>> df.iloc[[0]] a b c d 0 1 2 3 4 >>> type(df.iloc[[0]]) <class 'pandas.core.frame.DataFrame'> >>> df.iloc[[0, 1]] a b c d 0 1 2 3 4 1 100 200 300 400
使用切片对象
>>> df.iloc[:3] a b c d 0 1 2 3 4 1 100 200 300 400 2 1000 2000 3000 4000
布尔掩码的长度与索引的长度相同
>>> df.iloc[[True, False, True]] a b c d 0 1 2 3 4 2 1000 2000 3000 4000
选择索引为偶数的行
>>> df.iloc[lambda x: x.index % 2 == 0] a b c d 0 1 2 3 4 2 1000 2000 3000 4000
2)索引两个轴
可以混合索引和列的索引器类型。 使用:选择整个轴
用标量整数
>>> df.iloc[0, 1] 2
带有整数列表
>>> df.iloc[[0, 2], [1, 3]] b d 0 2 4 2 2000 4000
使用切片对象
>>> df.iloc[1:3, 0:3] a b c 1 100 200 300 2 1000 2000 3000
使用长度与列匹配的布尔数组
>>> df.iloc[:, [True, False, True, False]] a c 0 1 3 1 100 300 2 1000 3000
Series的可调用函数或DataFrame
>>> df.iloc[:, lambda df: [0, 2]] a c 0 1 3 1 100 300 2 1000 3000
3)使用示例
import pandas as pd # 创建 DataFrame mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4}, {'a': 100, 'b': 200, 'c': 300, 'd': 400}, {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000}] df = pd.DataFrame(mydict) print("Initial DataFrame:") print(df) # 1) 仅对行进行索引 # 带标量整数 print("\nIndexing with scalar integer:") print(type(df.iloc[0])) # <class 'pandas.core.series.Series'> print(df.iloc[0]) # 带有整数列表 print("\nIndexing with integer list:") print(df.iloc[[0]]) print(type(df.iloc[[0]])) # <class 'pandas.core.frame.DataFrame'> print(df.iloc[[0, 1]]) # 使用切片对象 print("\nIndexing with slice object:") print(df.iloc[:3]) # 布尔掩码的长度与索引的长度相同 print("\nIndexing with boolean mask:") print(df.iloc[[True, False, True]]) # 选择索引为偶数的行 print("\nIndexing rows where index is even:") print(df.iloc[lambda x: x.index % 2 == 0]) # 索引两个轴 # 用标量整数 print("\nIndexing with scalar integer for both axes:") print(df.iloc[0, 1]) # 带有整数列表 print("\nIndexing with integer list for both axes:") print(df.iloc[[0, 2], [1, 3]]) # 使用切片对象 print("\nIndexing with slice object for both axes:") print(df.iloc[1:3, 0:3]) # 使用长度与列匹配的布尔数组 print("\nIndexing with boolean array for columns:") print(df.iloc[:, [True, False, True, False]]) # 使用 Series 的可调用函数或 DataFrame print("\nIndexing with callable for columns:") print(df.iloc[:, lambda df: [0, 2]])