当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Pandas DataFrame iloc属性用法及代码示例


Pandas 的 DataFrame.iloc 用于使用整数索引访问或更新 DataFrame 的特定行/列。

注意

尽管它也可以用于访问 DataFrame 中的单个值,但在这种情况下我们通常使用 DataFrame.iat 属性。

返回值

如果在 [] 中使用单个标量,则返回 Series 。否则,返回 DataFrame

例子

考虑以下 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

访问行的子集

要访问位置 02 处的行:

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 对应的所有行。由于位置02 处的行对应于掩码中的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
使用数组

要访问位于行位置 02 以及列位置 01 的子集:

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 对应的列。在本例中,我们包括位置 02 处的列。

复制与查看

根据上下文,iloc 可以返回 viewcopy 。不幸的是,返回的规则很复杂,因此最佳实践是使用 _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

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | iloc property。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。