pandas使用新列名称作为字符串进行分配

时间:2016-09-29 10:25:08

标签: python pandas assign columnname

我最近发现了大熊猫"assign" method,我发现它非常优雅。 我的问题是新列的名称被指定为关键字,因此它不能包含空格或破折号。

    | 9     | 2016-09-19 09:26:15   | 2016-09-19 23:59:59.000 |
    | 9     | 2016-09-20 00:00:00   | 2016-09-20 01:18:02 |

但如果我想命名新专栏" ln(A)"例如? 例如。

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

我知道我可以在.assign调用之后立即重命名该列,但我想更多地了解这个方法及其语法。

2 个答案:

答案 0 :(得分:43)

您可以将关键字参数作为字典传递给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

答案 1 :(得分:6)

assign需要一堆关键词参数。反过来,它将分配具有关键字名称的列。这很方便,但你不能把表达作为关键词。 @EdChum在此link

的评论中详细说明了这一点

使用insert代替原地转换

df.insert(2, 'ln(A)', np.log(df.A))
df

enter image description here

如果您不想要就地

,请使用concat
pd.concat([df, np.log(df.A).rename('log(A)')], axis=1)

enter image description here