熊猫专栏创作

the*_*oop 2 python columnname pandas

我正在努力理解列命名约定背后的概念,因为以下创建新列的尝试之一似乎失败了:

from numpy.random import randn
import pandas as pd

df = pd.DataFrame({'a':range(0,10,2), 'c':range(0,1000,200)},
columns=list('ac'))
df['b'] = 10*df.a
df
Run Code Online (Sandbox Code Playgroud)

给出以下结果:

在此输入图像描述

然而,如果我试图通过替换以下行来创建列b,则没有错误消息,但数据帧df仅保留列a和c.

df.b = 10*df.a   ### rather than the previous df['b'] = 10*df.a ###
Run Code Online (Sandbox Code Playgroud)

大熊猫做了什么,为什么我的命令不正确?

EdC*_*ica 5

你做的是b为你的df 添加一个属性:

In [70]:
df.b = 10*df.a 
df.b

Out[70]:
0     0
1    20
2    40
3    60
4    80
Name: a, dtype: int32
Run Code Online (Sandbox Code Playgroud)

但我们发现没有添加新列:

In [73]:    
df.columns

Out[73]:
Index(['a', 'c'], dtype='object')
Run Code Online (Sandbox Code Playgroud)

这意味着KeyError如果我们尝试df['b'],我们会得到一个,为了避免这种歧义,你应该在分配时使用方括号.

例如,如果您有一列名为indexsummax那么做df.index将返回指标,而不是索引列,同样df.sumdf.max会搞砸了这些DF方法.

我强烈建议总是使用方括号,它避免任何歧义,最新的ipython能够使用方括号解析列名.将数据帧视为系列的字典也很有用,其中使用方括号分配和返回列是有意义的