簡體   English   中英

為什么在使用 pandas dataframe 時可以使用方括號來引用列標簽和行索引?

[英]Why can I use square brackets to refer to both column labels and row indices when using a pandas dataframe?

我有一個 dataframe ( df ),日期作為索引和列標簽。 我可以通過使用df['2008':]來引用索引來獲得 dataframe 的一部分,但我總是假設您必須先指定列,例如df[:]['2008':] ,我只是想了解為什么會這樣? 引用具有相同名稱的索引或列時,這可能會導致問題嗎?

有趣的問題,讓我們創建一個簡單的 DataFrame 來做一些實驗:

import pandas as pd

df = pd.DataFrame({'2008': [1, 3], 'column 2': [2, 4]}, 
                  index = ['2007', '2008'])
df
        2008    column 2
2007    1       2
2008    3       4

正如您所說,select 列的常用方法是在方括號中對其名稱進行索引:

df['2008']
2007    1
2008    3
Name: 2008, dtype: int64

因此,即使存在同名的索引值,這也有效。 您選擇某些行的方式如何?

df['2008':]
        2008    column 2
2008    3       4

這還有效嗎? 我們可以用同樣的方式對列進行切片嗎?

df['column 2':]
    2008    column 2

不,pandas 仍然假設我們想要對某些行進行切片,因此我們得到一個空的 DataFrame,因為索引'column 2'不存在。

結論:如果您在方括號中提供單個索引,pandas 假定它是列名。 但是,如果您在方括號中提供單個切片操作,pandas 假定您要對索引進行切片(即 select 某些行)。 這是有道理的,因為索引上的切片比列名上的切片更自然。

盡管如此,這可能會令人困惑並且可讀性不強,因此我建議使用loc來顯式地為此類操作提供行和列切片:

df.loc['2008':, :]
        2008    column 2
2008    3       4
  1. 表格

    df[something]

    決定

    1. 一個系列(來自一),如果某物是一列的名稱,
    2. 一個 dataframe (選定的),如果某物列名列表,或者
    3. 選定的 dataframe ,如果某物列表或一系列True / False值。

    例子:

    1. df["column1"]
    2. df[["column1", "column5"]]
    3. df[[True, False, True]] # assuming your dataframe has exactly 3 rows
  2. 表格

    df[row(s), column(s)]

    (所以row(s)是第一, column(s)是第二)
    select交叉處的單元格。

    為了安全起見,不要使用這種形式,而是使用顯式形式

    df.loc[row(s), column(s)]

    通過標簽確定row(s)col(s)與其從零開始的訂單號相反)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM