Python: 對於DataFrame.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 API
DataFrame.loc是純粹基於標簽的標簽索引選擇器。
loc[]主要是基於標簽的,但也可以與布爾數組一起使用。
支持的傳參格式:
1. 一個單一的標簽。比如5、‘g’.注意這里的5解釋為索引中的一個標簽,而不是沿着索引的整數位置。
2. 標簽構成的列表和數組。[‘a’, 'b', 'c']
3. 標簽組成的切片對象,比如 ‘a’: 'f' 。含頭且含尾。
4. 傳入布爾數組
5. 帶有一個參數的可調用函數,返回可以用索引的結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM