1. 程式人生 > >對於df.loc傳入列表和傳入元組輸出區別的理解

對於df.loc傳入列表和傳入元組輸出區別的理解

def test():
    import pandas as pd
    tuples = [
        ('cobra', 'mark i'), ('cobra', 'mark ii'),
        ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
        ('viper', 'mark ii'), ('viper', 'mark iii')
    ]
    index = pd.MultiIndex.from_tuples(tuples)
    values = [[12, 2], [0, 4], [10, 20], [1, 4], [7, 1], [16, 36]]
    df 
= pd.DataFrame(values, columns=['max_speed', 'shield'], index=index) print(df) all = slice(None) print(df.loc[[all, "mark i"], :]) print(df.loc[(all, "mark i"), :])

上面程式碼中,傳入列表[all, "mark i"]和傳入元組(all, "mark i")的結果不一致。

其中,df.loc中傳入列表,相當於列表中的每一個元素都需要對df進行索引切片。第一個元素是all,這個all相當於匹配任何索引,所以所有的資料都打印出來了。傳入元組,則相當與只使用元組執行一次切片。all相當於匹配索引的外層所有索引,“mark i"相當於匹配內層值為mark i的索引,最後列印的資料又兩個。

DataFrame.loc APIDataFrame.loc是純粹基於標籤的標籤索引選擇器。loc[]主要是基於標籤的,但也可以與布林陣列一起使用。支援的傳參格式:1. 一個單一的標籤。比如5、‘g’.注意這裡的5解釋為索引中的一個標籤,而不是沿著索引的整數位置。2. 標籤構成的列表和陣列。[‘a’, 'b', 'c']3. 標籤組成的切片物件,比如 ‘a’: 'f' 。含頭且含尾。4. 傳入布林陣列5. 帶有一個引數的可呼叫函式,返回可以用索引的結果。