我什么时候应该使用dt.column vs dt ['column'] pandas?

时间:2017-06-28 08:59:12

标签: python pandas

我正在进行一些计算和行操作,并意识到对于某些任务,例如数学运算,它们都可以工作。

d['c3'] = d.c1 / d. c2
d['c3'] = d['c1'] / d['c2']

我想知道是否有一些情况下使用一个比另一个或大多数人使用的更好。

1 个答案:

答案 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'

所以你应该停止作为属性访问列,并且总是使用方括号,因为它避免了上面的所有问题