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

括号表示法和点表示法之间的速度差异,用于访问pandas中的列

宋腾
2023-03-14
问题内容

让我们有一个小的数据框: df = pd.DataFrame({'CID': [1,2,3,4,12345, 6]})

当我搜索会员资格时,根据我要搜索indf.CID还是in的速度差异很大df['CID']

In[25]:%timeit 12345 in df.CID
Out[25]:89.8 µs ± 254 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In[26]:%timeit 12345 in df['CID']
Out[26]:42.3 µs ± 334 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In[27]:type( df.CID)
Out[27]: pandas.core.series.Series

In[28]:type( df['CID'])
Out[28]: pandas.core.series.Series

这是为什么?


问题答案:

df['CID']委托给NDFrame.__getitem__,显然您正在执行索引操作。

另一方面,df.CIDto的代表必须NDFrame.__getattr__做一些额外的繁重工作,主要是确定“
CID”是使用属性访问来调用的属性,函数还是列(方便,但不建议用于生产代码)。

现在,为什么不推荐呢?考虑,

df = pd.DataFrame({'A': [1, 2, 3]})
df.A

0    1
1    2
2    3
Name: A, dtype: int64

将“
A”列称为df.A,没有任何问题,因为它与熊猫中的任何属性或函数命名都不冲突。但是,请考虑该pop功能(仅作为示例)。

df.pop
# <bound method NDFrame.pop of ...>

df.pop是的绑定方法df。现在,出于各种原因,我想创建一个名为“ pop”的列。

df['pop'] = [4, 5, 6]
df
   A  pop
0  1    4
1  2    5
2  3    6

很好,但是

df.pop
# <bound method NDFrame.pop of ...>

我无法使用属性符号来访问此列。然而…

df['pop']

0    4
1    5
2    6
Name: pop, dtype: int64

方括号表示法仍然有效。这就是为什么这样更好。



 类似资料:
  • 问题内容: 我试图理解和符号之间的区别。在下面的问题中,我使用正确的答案。当我使用它不起作用。有人可以解释为什么与众不同。 问题答案: 使用点表示法时,表示对象中的实际属性,该属性将不存在。因此,返回不等于的。 使用表示法时,您将使用变量中的名称访问对象中的属性。因此,这将起作用。 例如, 这将打印, 因为,没有成员命名(尝试获取名称为的成员),而在下一种情况下,有成员命名为(尝试获取具有in的值

  • 问题内容: 使用和访问数组或对象属性的真正区别是什么?使用哪一个? 另外,为什么运算符不允许索引属性? 问题答案: 使用来访问成员称为 点符号 。用它们访问它们称为 括号符号 。 点表示法仅适用于属性名称即有效标识符名称spec,因此基本上任何名称也将是有效 变量名称 (有效 标识符和任何保留关键字。 [规格]](http://es5.github.io/#x7.6.1) 。 括号表示法需要一个表

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

  • 问题内容: 我有以下Java正则表达式,我没有编写,并且正试图修改: 与此相似。 请注意第一个问号。这是否意味着该组是可选的?对应的后面已经有一个问号。冒号在正则表达式中有特殊含义吗? regex可以很好地编译,并且已经有JUnit测试显示它如何工作。只是我对为什么第一个问号和冒号存在感到有些困惑。 问题答案: 启动一个非捕获组。除非您在使用后从正则表达式中检索组,否则没有什么不同。请参阅什么是非

  • 问题内容: 使用oracle的plus表示法和ansi标准表示法之间有什么区别? 性能上有区别吗? 加号是否已弃用? 问题答案: 在AFAIK中,该符号仅用于向后兼容,因为Oracle在将ANSI标准用于连接之前就首次使用了该符号。它特定于Oracle,并且当存在等效的符合标准的版本时,应避免在新代码中使用它。 似乎两者之间存在差异,并且该符号具有ANSI连接语法所没有的限制。Oracle自己建议

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