[英]pandas assign with new column name as string
I recently discovered pandas "assign" method which I find very elegant. 我最近发现了大熊猫“分配”方法 ,我发现它非常优雅。 My issue is that the name of the new column is assigned as keyword, so it cannot have spaces or dashes in it.
我的问题是新列的名称被指定为关键字,因此它不能包含空格或破折号。
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
but what if I want to name the new column "ln(A)" for example? 但是如果我想将新列命名为“ln(A)”呢? Eg
例如
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
I know I could rename the column right after the .assign call, but I want to understand more about this method and its syntax. 我知道我可以在.assign调用之后立即重命名该列,但我想更多地了解这个方法及其语法。
You can pass the keyword arguments to assign
as a dictionary, like so: 您可以传递关键字参数以
assign
为字典,如下所示:
kwargs = {"ln(A)" : lambda x: np.log(x.A)}
df.assign(**kwargs)
A B ln(A)
0 1 0.500033 0.000000
1 2 -0.392229 0.693147
2 3 0.385512 1.098612
3 4 -0.029816 1.386294
4 5 -2.386748 1.609438
5 6 -1.828487 1.791759
6 7 0.096117 1.945910
7 8 -2.867469 2.079442
8 9 -0.731787 2.197225
9 10 -0.686110 2.302585
assign
expects a bunch of key word arguments. assign
需要一堆关键字参数。 It will, in turn, assign columns with the names of the key words. 反过来,它将分配具有关键字名称的列。 That's handy, but you can't pass an expression as the key word.
这很方便,但你不能把表达作为关键词。 This is spelled out by @EdChum in the comments with this link
@EdChum在此链接的评论中详细说明了这一点
use insert
instead for inplace transformation 使用
insert
代替inplace转换
df.insert(2, 'ln(A)', np.log(df.A))
df
use concat
if you don't want inplace 如果你不想要就地使用
concat
pd.concat([df, np.log(df.A).rename('log(A)')], axis=1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.