![](/img/trans.png)
[英]Pandas df.loc[] gives SyntaxError when both row and column indexers are given inside double square brackets. Why?
[英]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
表格
df[something]
決定
True
/ False
值。例子:
df["column1"]
df[["column1", "column5"]]
df[[True, False, True]] # assuming your dataframe has exactly 3 rows
表格
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.