使用loc和仅使用方括号来过滤PandasPython中的列有什么区别?

使用loc和仅使用方括号来过滤PandasPython中的列有什么区别?,第1张

使用loc和仅使用方括号来过滤Pandas / Python中的列有什么区别?

在以下情况下,它们的行为相同:

  1. 选择单个列(
    df['A']
    df.loc[:, 'A']
    ->选择列A相同)
  2. 选择列列表(
    df[['A', 'B', 'C']]
    df.loc[:, ['A', 'B', 'C']]
    ->选择列A,B和C相同)
  3. 按行切片
    df[1:3]
    df.iloc[1:3]
    ->选择第1行和第2行相同。但是,请注意,如果使用
    loc
    而不是进行切片,则
    iloc
    假设您具有RandeIndex,则将获得第1、2和3行。请参见此处的详细信息。)

但是,

[]
在以下情况下不起作用:

  1. 您可以使用
    df.loc[row_label]
  2. 您可以使用
    df.loc[[row_label1, row_label2]]
  3. 您可以使用
    df.loc[:, 'A':'C']

这三个不能用来完成

[]
。更重要的是,如果您的选择同时涉及到行和列,那么分配就会成问题。

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
)。除此之外,
.
并且
[]
是相同的。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5642739.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存