當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。