【发布时间】:2017-02-07 15:02:50
【问题描述】:
我最近发现了 pandas "assign" method,我觉得它非常优雅。 我的问题是新列的名称被指定为关键字,所以它不能有空格或破折号。
df = DataFrame({'A': range(1, 11), 'B': np.random.randn(10)})
df.assign(ln_A = lambda x: np.log(x.A))
A B ln_A
0 1 0.426905 0.000000
1 2 -0.780949 0.693147
2 3 -0.418711 1.098612
3 4 -0.269708 1.386294
4 5 -0.274002 1.609438
5 6 -0.500792 1.791759
6 7 1.649697 1.945910
7 8 -1.495604 2.079442
8 9 0.549296 2.197225
9 10 -0.758542 2.302585
但是如果我想将新列命名为“ln(A)”呢? 例如。
df.assign(ln(A) = lambda x: np.log(x.A))
df.assign("ln(A)" = lambda x: np.log(x.A))
File "<ipython-input-7-de0da86dce68>", line 1
df.assign(ln(A) = lambda x: np.log(x.A))
SyntaxError: keyword can't be an expression
我知道我可以在 .assign 调用之后立即重命名该列,但我想了解有关此方法及其语法的更多信息。
【问题讨论】:
-
那么括号立即将其视为某种方法调用,这是 var 的非法名称:docs.python.org/3.2/reference/lexical_analysis.html#identifiers
-
从上面的例子中,我仍然可以做 df['log(A)'] = df.sum(axis = 1),但我明白为什么我会得到上面的错误(这是有点意料之中的) )
-
但是
df['log(A)']是一个str变量名规则不适用
标签: python pandas assign columnname