python - renombrar - rename columns pandas
pandas asigna con nuevo nombre de columna como cadena (2)
Recientemente descubrí el método de "asignación" de pandas que me parece muy elegante. Mi problema es que el nombre de la nueva columna se asigna como palabra clave, por lo que no puede contener espacios o guiones.
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
pero ¿qué pasa si quiero nombrar la nueva columna "ln (A)" por ejemplo? P.ej
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
Sé que podría cambiar el nombre de la columna justo después de la llamada .assign, pero quiero entender más sobre este método y su sintaxis.
Puede pasar los argumentos de palabras clave para assign
como un diccionario, así:
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
espera un montón de argumentos de palabras clave. A su vez, asignará columnas con los nombres de las palabras clave. Eso es útil, pero no puedes pasar una expresión como la palabra clave. Esto lo explica @EdChum en los comentarios con este docs.python.org/3.2/reference/lexical_analysis.html#identifiers
utilizar insert
lugar de transformación inplace
df.insert(2, ''ln(A)'', np.log(df.A))
df
usa concat
si no quieres in situ
pd.concat([df, np.log(df.A).rename(''log(A)'')], axis=1)