【发布时间】:2019-10-08 00:05:25
【问题描述】:
让我们有一个小数据框:df = pd.DataFrame({'CID': [1,2,3,4,12345, 6]})
当我搜索会员资格时,根据我是要求搜索 df.CID 还是 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
这是为什么呢?
【问题讨论】:
-
不是一个完整的答案,但是; 总是 引用 pandas 中的列时使用括号索引。点快捷方式有效,但这是不好的做法。一个原因,也可能是它需要更长时间的原因之一,是在 python 中,
object.thing通常用于对象的属性。在这种情况下,数据框具有.shape, .columns, .name之类的属性(最后一个是另一个很好的理由,使用括号可以有一个名为['name']的列),因此尝试将列作为属性而不是显式作为列 -
+/- 边距非常大 - 确定效果是真实的/一般的?
-
我认为您希望在大多数情况下使用 df['CID'],因为通过 DataFrame 属性访问列存在一些细微差别。我还想补充一点,我认为您想在 df['CID'].values 中搜索 12345,以检查该数字是否在系列中。否则它将检查该数字是否在索引中。
标签: python pandas performance