Pandas 的 DataFrame.iloc
用于使用整数索引访问或更新 DataFrame 的特定行/列。
注意
尽管它也可以用于访问 DataFrame 中的单个值,但在这种情况下我们通常使用 DataFrame.iat
属性。
返回值
例子
考虑以下 DataFrame :
df = pd.DataFrame({"A":[1,2,3], "B":[4,5,6]}, index=["a","b","c"])
df
A B
a 1 4
b 2 5
c 3 6
访问单行
要访问第二行:
df.iloc[1]
A 2
B 5
Name: 1, dtype: int64
由于我们在 []
中有一个标量,因此这里的返回类型是 Series
。
访问行的子集
要访问位置 0
和 2
处的行:
df.iloc[[0,2]]
A B
a 1 4
c 3 6
由于我们在 []
中有一个列表,因此这里的返回类型是 DataFrame
。
使用切片语法访问行
作为参考,我们再次在此处显示df
:
df
A B
a 1 4
b 2 5
c 3 6
切片的工作方式与 Python 标准列表的工作方式类似。
要访问从位置 0
(含)到位置 2
(不包括)的行:
df.iloc[0:2]
A B
a 1 4
b 2 5
如果您不指定起点(例如 [:2]
)或终点(例如 [1:]
),则 iloc
将返回从开始或到结束的所有行。例如,要从索引 1
获取所有行:
df.iloc[1:]
A B
b 2 5
c 3 6
使用布尔掩码访问行
我们也可以提供一个布尔掩码(即类似数组的布尔结构)来获取行。
为了供您参考,我们再次在此处显示df
:
df
A B
a 1 4
b 2 5
c 3 6
例如,考虑以下掩码:
df.iloc[[False, True, False]]
A B
b 2 5
通过这种方法,将返回与 True
对应的所有行。由于位置0
和2
处的行对应于掩码中的False
,因此排除这些行。
请注意,布尔掩码的长度必须与 DataFrame 中的行数相同。
使用函数访问行
我们还可以将函数传递给 iloc
来指定要获取的行。
为了供您参考,我们再次在此处显示df
:
df
A B
a 1 4
b 2 5
c 3 6
要获取索引大于 "b"
的行:
df.iloc[lambda x: x.index > "b"]
A B
c 3 6
对于那些不熟悉 Python lambda 的人来说,该函数可以解释如下:
def foo(x): # The naming here is irrelevant
return x.index > "b"
在此,请注意以下事项:
-
x
表示源 DataFrame,即df
。 -
该函数返回一个布尔数组,其中将返回与
True
对应的行。
访问单个值
我们还可以使用 iloc
访问 DataFrame 中的单个值。
为了供您参考,我们再次在此处显示df
:
df
A B
a 1 4
b 2 5
c 3 6
要访问位置 [1,1]
处的值:
df.iloc[1,1]
5
警告
虽然 iloc
也可用于访问 DataFrame 中的单个值,但在这种情况下我们通常使用 DataFrame.iat
属性。
使用行和列访问值
考虑以下 DataFrame :
df = pd.DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]}, index=["a","b","c"])
df
A B C
a 1 4 7
b 2 5 8
c 3 6 9
使用数组
要访问位于行位置 0
和 2
以及列位置 0
和 1
的子集:
df.iloc[[0,2], [0,1]]
A B
a 1 4
c 3 6
使用切片
您也可以在这里使用切片语法:
df.iloc[1:, :2]
A B
b 2 5
c 3 6
在这里,我们正在获取包括位置 1
在内的所有行,以及直到位置 2
处的列(不包括)的所有列。
使用布尔掩码
布尔掩码在这里也起作用:
df.iloc[1:, [True, False, True]]
A C
b 2 8
c 3 9
在这里,我们正在获取包括位置 1
在内的所有行,以及与布尔掩码中的 True
对应的列。在本例中,我们包括位置 0
和 2
处的列。
复制与查看
根据上下文,iloc
可以返回 view
或 copy
。不幸的是,返回的规则很复杂,因此最佳实践是使用 _is_view
属性亲自检查这一点。
有一条规则很容易记住——iloc
返回看法提取单列时的数据:
df = pd.DataFrame({"A":[2,3], "B":[4,5]})
col_B = df.iloc[:,1]
col_B._is_view
True
由于 col_B
是一个视图,因此修改 col_B
将会改变原始的 df
。
使用 iloc 更新值
考虑以下 DataFrame :
df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df
A B
a 3 5
b 4 6
更新单个值
要更新行 1
、列 1
处的值:
df.iloc[1,1] = 10
df
A B
a 3 5
b 4 10
更新多个值
要更新多个值,只需使用上述任何访问模式,然后使用 =
分配新值。例如,要更新第二列:
df.iloc[:,1] = [9,10]
df
A B
a 3 9
b 4 10
相关用法
- Python Pandas DataFrame items方法用法及代码示例
- Python Pandas DataFrame insert方法用法及代码示例
- Python Pandas DataFrame isin方法用法及代码示例
- Python PySpark DataFrame intersect方法用法及代码示例
- Python Pandas DataFrame idxmin方法用法及代码示例
- Python Pandas DataFrame idxmax方法用法及代码示例
- Python Pandas DataFrame iteritems方法用法及代码示例
- Python Pandas DataFrame infer_objects方法用法及代码示例
- Python Pandas DataFrame index属性用法及代码示例
- Python Pandas DataFrame isna方法用法及代码示例
- Python Pandas DataFrame iat属性用法及代码示例
- Python Pandas DataFrame info方法用法及代码示例
- Python Pandas DataFrame itertuples方法用法及代码示例
- Python Pandas DataFrame iterrows方法用法及代码示例
- Python PySpark DataFrame intersectAll方法用法及代码示例
- Python Pandas DataFrame interpolate方法用法及代码示例
- Python Pandas DataFrame isnull方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
- Python Pandas DataFrame pop方法用法及代码示例
- Python Pandas DataFrame nsmallest方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame max方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python Pandas DataFrame agg方法用法及代码示例
- Python Pandas DataFrame copy方法用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | iloc property。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。