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
、列 A
和 B
中的数据:
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
可以返回 view
或 copy
。不幸的是,返回的规则很复杂,因此最佳实践是使用 _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
更新单个值
要更改 0
行 B
列的值:
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
相关用法
- Python Pandas DataFrame lookup方法用法及代码示例
- Python Pandas DataFrame lt方法用法及代码示例
- Python Pandas DataFrame last_valid_index方法用法及代码示例
- Python PySpark DataFrame limit方法用法及代码示例
- Python Pandas DataFrame le方法用法及代码示例
- Python Pandas DataFrame last方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
- Python Pandas DataFrame pop方法用法及代码示例
- Python Pandas DataFrame nsmallest方法用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame items方法用法及代码示例
- Python Pandas DataFrame max方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python Pandas DataFrame agg方法用法及代码示例
- Python Pandas DataFrame copy方法用法及代码示例
- Python Pandas DataFrame pow方法用法及代码示例
- Python Pandas DataFrame insert方法用法及代码示例
- Python Pandas DataFrame all方法用法及代码示例
- Python Pandas DataFrame unstack方法用法及代码示例
- Python Pandas DataFrame mean方法用法及代码示例
- Python PySpark DataFrame filter方法用法及代码示例
- Python Pandas DataFrame tz_convert方法用法及代码示例
- Python Pandas DataFrame isin方法用法及代码示例
- Python PySpark DataFrame collect方法用法及代码示例
- Python PySpark DataFrame intersect方法用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | loc property。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。