微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我什么时候应该使用dt.column vs dt [‘column’]大熊猫?

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

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

我想知道是否存在某些情况下使用某一种方法优于另一种方法或大多数人使用的方法.

解决方法:

您实际上应该只是停止将列作为属性访问,并养成使用方括号[]进行访问的习惯.这样可以避免以下错误:列名具有illegal characters in python,嵌入式空格,列名与内置方法共享相同的名称以及模棱两可的用法(例如,您拥有名为index的列):

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”返回它的成员.

因此,您应该停止访问列作为属性,并始终使用方括号,因为这样可以避免上述所有问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐