我正在进行一些计算和行操作,并意识到对于某些任务,例如数学运算,它们都可以工作。
d['c3'] = d.c1 / d. c2
d['c3'] = d['c1'] / d['c2']
我想知道是否有一些情况下使用一个比另一个或大多数人使用的更好。
答案 0 :(得分:4)
您应该停止访问列作为属性,并养成使用方括号[]
访问的习惯。这样可以避免列名具有illegal characters in python,嵌入空格,列名与内置方法共享同名的错误,以及例如您有一个名为index
的列的模糊用法:< / p>
In[13]:
df = pd.DataFrame(np.random.randn(5,4), columns=[' a', 'mean', 'index', '2'])
df.columns.tolist()
Out[13]: [' a', 'mean', 'index', '2']
因此,如果我们现在尝试访问列2
:
In[14]:
df.2
File "<ipython-input-14-0490d6ae2ca0>", line 1
df.2
^
SyntaxError: invalid syntax
它失败,因为它是一个无效的名称,但df['2']
可以正常工作
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'
因为这真的是' a'
带有前导空格(如果列名中的任何地方都有空格也会失败)它会在KeyError
上失败
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只是非常印刷它
In[17]:
df.index
Out[17]: RangeIndex(start=0, stop=5, step=1)
上面我们有不明确的意图,因为索引是它返回的成员,而不是列'index'
。
所以你应该停止作为属性访问列,并且总是使用方括号,因为它避免了上面的所有问题