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


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


Pandas DataFrame.loc 用于使用行和列标签访问或更新 DataFrame 的值。请注意,loc 是一个属性,而不是函数 - 我们使用 [] 表示法提供参数。

允许的输入如下:

  • 数字和字符串(例如 3"a" )。

  • 标签列表(例如 [3,"a"] )。

  • 切片对象(例如"a":"d")。与标准 Python 切片不同,两端都包含在内.

  • 一个布尔数组,其中将返回与 True 对应的行/列。

  • 一个函数,将源 DataFrame 作为输入并返回上述之一。

注意

数字被视为标签,因此它们始终被转换为字符串。

返回值

如果结果是单行或单列,则返回Series。否则,返回DataFrame

例子

访问单个值

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6

要使用行和列标签访问 [bB] 处的值:

df.loc["b","B"]



6

访问行

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4,5],"B":[6,7,8]}, index=["a","b","c"])
df



   A  B
a  3  6
b  4  7
c  5  8
访问单行

要获取行b

df.loc["b"]



A    4
B    7
Name: b, dtype: int64
访问多行

要访问多行,请传入行标签列表,如下所示:

df.loc[["a","c"]]



   A  B
a  3  6
c  5  8

您还可以使用切片语法,如下所示:

df.loc["a":"b"]



   A  B
a  3  6
b  4  7

请注意,与 Python 的标准切片行为不同,两端都包含在内.

访问列

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]}, index=["a","b"])
df



   A  B
a  3  5
b  4  6
访问单个列

要访问单个列:

df.loc[:,"A"]



a    3
b    4
Name: A, dtype: int64

这里,逗号之前的:表示我们要检索所有行。逗号后面的 "A" 表示我们只想获取 A 列。

访问多列

要访问多个列,只需在逗号后面传入列标签列表即可:

df.loc[:,["A","B"]]



   A  B
a  3  5
b  4  6

访问行和列

要访问特定的行和列,只需组合上述访问模式即可。

例如,考虑以下 DataFrame:

df = pd.DataFrame({"A":[3,4],"B":[5,6],"C":[7,8]}, index=["a","b"])
df



   A  B  C
a  3  5  7
b  4  6  8

要获取行 a 、列 AB 中的数据:

df.loc["a", ["A","B"]]



A    3
B    5
Name: a, dtype: int64

使用函数

loc 属性还允许您传递函数。

有条件选择行

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4],"B":[5,6]})
df



   A  B
0  3  5
1  4  6

我们首先定义一个匹配条件:

def criteria(my_df):
 return my_df["A"] + my_df["B"] > 9

该函数接受源 DataFrame 作为参数,并返回布尔值 Series 来指示是否满足条件。因此,我们的 criteria 函数将用于选择值总和大于 9 的行:

my_df["A"] + my_df["B"] > 9



0    False
1     True
dtype: bool

我们可以将我们的标准直接传递到 loc 中,如下所示:

df.loc[criteria]



   A  B
1  4  6

正如您所期望的,我们还可以指定要包含的列:

df.loc[criteria, "A"]



1    4
Name: A, dtype: int64

使用布尔掩码

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4,5],"B":[6,7,8]})
df



   A  B
0  3  6
1  4  7
2  5  8

我们可以使用布尔掩码(即布尔值列表)来提取某些行/列:

df.loc[[True,False,True]]



   A  B
0  3  6
2  5  8

请注意如何仅返回与 True 对应的行。

复制与查看

根据上下文,loc 可以返回 viewcopy 。不幸的是,返回的规则很复杂,因此最佳实践是使用 _is_view 属性亲自检查这一点。

有一条规则很容易记住——loc返回看法提取单列时的数据:

df = pd.DataFrame({"A":[2,3], "B":[4,5]})
col_A = df.loc[:,"A"]
col_A._is_view



True

由于 col_A 是一个视图,因此修改 col_A 将会改变原始的 df

更新值

考虑以下 DataFrame :

df = pd.DataFrame({"A":[3,4], "B":[5,6]}, index=["a","b"])
df



   A  B
0  3  5
1  4  6
更新单个值

要更改 0B 列的值:

df.loc["a","B"] = 9
df



   A  B
a  3  9
b  4  6
更新多个值

要更新多个值,只需使用上述任何访问模式,然后使用 = 分配新值。

例如,要更新第一行:

df.loc["a",["A","B"]] = [8,9]
df



   A  B
a  8  9
b  4  6

相关用法


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