在以下情况下,它们的行为相同:
但是,[]
在以下情况下不起作用:
这三个不能用来完成[]
。更重要的是,如果您的选择同时涉及到行和列,那么分配就会成问题。
df[1:3]['A'] = 5
这将选择行1和2,然后选择返回对象的列“ A”并为其分配值5。问题是,返回的对象可能是副本,因此这可能不会更改实际的DataFrame。这将引发SettingWithCopyWarning。这种分配的正确方法是
df.loc[1:3, 'A'] = 5
使用.loc
,可以确保修改原始DataFrame。它还允许您对列(df.loc[:, 'C':'F']
)进行切片,选择单行(df.loc[5]
)和选择行列表(df.loc[[1, 2, 5]]
)。
另请注意,这两个未同时包含在API中。.loc
后来被添加为更强大,更明确的索引器。有关更多详细信息,请参见unutbu的答案。
注意:使用[]
vs获取列.
是一个完全不同的主题。.
只是为了方便。它仅允许访问其名称为有效Python标识符的列(即它们不能包含空格,它们不能由数字组成…)。当名称与Series / DataFrame方法冲突时,不能使用它。它也不能用于不存在的列(即,df.a = 1
如果没有column ,分配将不起作用a
)。除此之外,.
并且[]
是相同的。