Pandas назначить новое имя столбца как строку
Недавно я обнаружил pandas "присваивать" метод, который я считаю очень элегантным.
Моя проблема в том, что имя нового столбца назначается как ключевое слово, поэтому в нем не может быть пробелов или дефис.
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, но я хочу больше узнать об этом методе и его синтаксисе.
Ответы
Ответ 1
Вы можете передать аргументы ключевого слова в 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
Ответ 2
assign
ожидает кучу аргументов ключевых слов. Он, в свою очередь, назначает столбцы именам ключевых слов. Это удобно, но вы не можете передать выражение в качестве ключевого слова. Это объясняется @EdChum в комментариях с помощью ссылка
используйте insert
вместо этого для преобразования inplace
df.insert(2, 'ln(A)', np.log(df.A))
df
![введите описание изображения здесь]()
используйте concat
, если вы не хотите на месте
pd.concat([df, np.log(df.A).rename('log(A)')], axis=1)
![введите описание изображения здесь]()