当前位置: 首页 > 面试题库 >

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

贝成业
2023-03-14
问题内容

我注意到在Pandas DataFrame中选择列的三种方法:

使用loc选择列的第一种方法:

df_new = df.loc[:, 'col1']

第二种方法-看起来更简单,更快:

df_new = df['col1']

第三种方法-最方便:

df_new = df.col1

这三种方法之间有区别吗?我不这么认为,在这种情况下,我宁愿使用第三种方法。

我最奇怪的是为什么似乎有三种方法可以做同一件事。


问题答案:

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

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



 类似资料:
  • 问题内容: 它们都有效吗?是出于某些原因而首选? 问题答案: 方括号是列表,括号是元组。 列表是可变的,这意味着您可以更改其内容: 而元组不是: 另一个主要区别是,元组是可哈希的,这意味着您可以将其用作字典的键。例如: 请注意,正如许多人指出的那样,您可以将元组加在一起。例如: 但是, 这并不意味着元组是可变的 。在上面的示例中,通过将两个元组加在一起作为参数来构造 新的 元组。原始元组未修改。为

  • 问题内容: 即: 输出是相同的。 这个答案适用于这种情况吗? 问题答案: “点符号”,即为方便起见公开的属性访问。 你可以直接作为属性访问“系列”上的索引,“数据框架”上的列以及“面板”上的项目: 做同样的事情:它返回列的。 关于属性访问的一些警告: 你无法添加列(将无法正常工作,更糟的是:它会默默地实际上创建一个新属性而不是一个列-请在此处进行猴子修补) 如果列名中有空格或列名是整数,则将无法使

  • 这里我理解哈希(#)符号将定义为本地模板变量,但是前面的星号是什么意思呢?还有,有必要吗? 下面是使用括号的示例: 我有点理解周围的括号将它绑定到HTML属性/Angular指令。这是否意味着它们是Angular计算表达式的指针?就像是Angular 1中的的等价物? 我猜真正的问题是,这些符号在Angular 2中有特殊的含义吗,知道何时使用每一个的最简单的方法是什么?谢谢!!

  • 我来自C背景,最近开始学习python。我正在学习索引和选择数据。我遇到了在类,和在熊猫库。我不明白什么是?是功能还是属性?很多时候,我错误地使用而不是,并且没有得到实际的结果(但它不会给我带来错误)。 例子: 有谁能告诉我在哪里可以更多地研究这类运营商。

  • 因此.loc和.iloc不是典型的函数。它们以某种方式使用[和]来包围参数,使其与普通数组索引相当。然而,我从未在另一个库中看到过这种情况(我可以想到,可能numpy就是这样的东西,我不知道它在技术上是如何工作的/在python代码中是如何定义的)。 本例中的括号是否只是函数调用的语法糖?如果是这样,那么如何让任意函数使用括号而不是括号呢?否则,它们的使用/定义有什么特殊之处?

  • 问题内容: 我来自Javascript背景(可以同时通过属性和符号访问属性),所以请原谅我,但是Python中两者之间的区别到底是什么? 从我的实验它seeems认为应始终使用,既得到的索引或并从在某个键中获得的价值。这是否正确?如果不正确,什么时候在Python中使用? 问题答案: 点运算符用于访问任何对象的属性。例如,复数 具有(其中包括)两个属性和: 除此以外,它还有一个方法,它也是一个属性