When should I use dt.column vs dt['column'] pandas?
我做了一些计算和行操作,并意识到对于一些任务,如数学运算,它们都能工作,例如。
1 2 | d['c3'] = d.c1 / d. c2 d['c3'] = d['c1'] / d['c2'] |
我想知道在某些情况下,使用一个比另一个更好,或者大多数人使用什么。
您应该停止访问列作为属性,养成使用方括号
1 2 3 4 5 | In[13]: df = pd.DataFrame(np.random.randn(5,4), columns=[' a', 'mean', 'index', '2']) df.columns.tolist() Out[13]: [' a', 'mean', 'index', '2'] |
因此,如果我们现在尝试访问列
1 2 3 4 5 6 | In[14]: df.2 File"<ipython-input-14-0490d6ae2ca0>", line 1 df.2 ^ SyntaxError: invalid syntax |
号
它失败了,因为它是一个无效的名称,但
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | In[15]: df.a --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-15-b9872a8755ac> in <module>() ----> 1 df.a C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name) 3079 if name in self._info_axis: 3080 return self[name] -> 3081 return object.__getattribute__(self, name) 3082 3083 def __setattr__(self, name, value): AttributeError: 'DataFrame' object has no attribute 'a' |
因此,因为这实际上是一个带前导空格的
1 2 3 4 5 6 7 8 9 10 | In[16]: df.mean Out[16]: <bound method DataFrame.mean of a mean index 2 0 -0.022122 1.858308 1.823314 0.238105 1 -0.461662 0.482116 1.848322 1.946922 2 0.615889 -0.285043 0.201804 -0.656065 3 0.159351 -1.151883 -1.858024 0.088460 4 1.066735 1.015585 0.586550 -1.898469> |
。
这是更微妙的,看起来它做了一些事情,但实际上它只是返回方法地址,这里ipython只是很漂亮地打印它
1 2 3 4 | In[17]: df.index Out[17]: RangeIndex(start=0, stop=5, step=1) |
上面我们有模棱两可的意图,因为索引是一个成员,所以返回的不是列
因此,您应该停止访问列作为属性,并始终使用方括号,因为这样可以避免上述所有问题。