Pandas DataFrame.loc中的不同括号

Pandas DataFrame.loc中的不同括号,pandas,dataframe,Pandas,Dataframe,使用loc[x,y]与loc[x][y]与loc[[x]][y]有什么区别?乍一看,他们似乎很相似 df = pd.DataFrame(np.arange(6).reshape(3, 2), columns=['price', 'count'], index=['First', 'Second', 'Third']) print(df) # price count # First 0

使用
loc[x,y]
loc[x][y]
loc[[x]][y]
有什么区别?乍一看,他们似乎很相似

df = pd.DataFrame(np.arange(6).reshape(3, 2),
                  columns=['price', 'count'],
                  index=['First', 'Second', 'Third'])
print(df)
#         price  count
# First       0      1
# Second      2      3
# Third       4      5

print(df.loc['Second', 'count'])
# 3

print(df.loc['Second']['count'])
# 3

print(df.loc[['Second'], 'count'])
# Second    3

虽然前两个在输出上是等效的,但第二个称为链式索引:

第二种类型也是
系列

In[48]:
type(df.loc['Second'])

Out[48]: pandas.core.series.Series
然后索引索引值,然后返回标量值:

In[47]:
df.loc['Second']

Out[47]: 
price    2
count    3
Name: Second, dtype: int32

In[49]:
df.loc['Second']['count']

Out[49]: 3
In[44]:
type(df.loc[['Second']])

Out[44]: pandas.core.frame.DataFrame
关于最后一个,附加括号返回df,这就是为什么您看到的是索引值而不是标量值:

In[47]:
df.loc['Second']

Out[47]: 
price    2
count    3
Name: Second, dtype: int32

In[49]:
df.loc['Second']['count']

Out[49]: 3
In[44]:
type(df.loc[['Second']])

Out[44]: pandas.core.frame.DataFrame
因此,然后传递该列,为该df编制索引,并返回匹配的列,作为
系列

In[46]:
type(df.loc[['Second'],'count'])

Out[46]: pandas.core.series.Series

因此,这取决于您想要实现什么,但请避免使用第二种形式,因为在尝试分配给列或df时,它可能会导致意外行为

非常感谢您的精彩解释!在您提供的链接中,有些操作带有
loc
,有些没有。我们是否应该考虑<代码> dfmi[[一] ] /代码>与<代码> dfmi.LOC [ [一] ] < /代码>?@康斯坦丁取决于下一步你做什么,如果你做了代码> dfmi[[一] ] [[第二] ] < /代码>,那么这将是链式索引,它可以返回一个拷贝或一个视图。如果您只想查看数据,那么任何一种方法都可以,它的任务就是可能出现问题的地方。在这种情况下,请遵循该链接中的建议