es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DataFrames.transform especificando la variable objetivo con una función anónima en Julia.

Estoy intentando usar transform con una función anónima (x -> uppercase.(x)) y almacenar la nueva columna como “A” especificando un nombre de columna objetivo (:A).

Si no especifico una variable de columna objetivo (primera transformación a continuación), la nueva variable se produce correctamente (es decir, un vector con 5 elementos). Sin embargo, una vez que especifico la columna objetivo (segunda transformación a continuación), la función devuelve un vector de pares bajo el nombre “a_function”.

¿Cómo puedo producir el DataFrame deseado con una nueva columna “A” que contenga un vector con 5 elementos (“A” a “E”)? ¿Por qué la segunda transformación a continuación devuelve un vector de pares con un nombre diferente al especificado?

using DataFrames

df_1 = DataFrame(a = ["a", "b", "c", "d", "e"])

df_2 = transform(df_1, :a => x -> uppercase.(x))  # primera transformación

df_2
 Row │ a       a_function 
     │ String  String
─────┼────────────────────
   1 │ a       A
   2 │ b       B
   3 │ c       C
   4 │ d       D
   5 │ e       E

df_3 = transform(df_1, :a => x -> uppercase.(x) => :A) # segunda transformación

df_3
5×2 DataFrame
 Row │ a       a_function
     │ String  Pair…
─────┼───────────────────────────────────────
   1 │ a       ["A", "B", "C", "D", "E"]=>:A
   2 │ b       ["A", "B", "C", "D", "E"]=>:A
   3 │ c       ["A", "B", "C", "D", "E"]=>:A
   4 │ d       ["A", "B", "C", "D", "E"]=>:A
   5 │ e       ["A", "B", "C", "D", "E"]=>:A

DataFrame deseado:

 DataFrame(a = ["a", "b", "c", "d", "e"],
    A = ["A", "B", "C", "D", "E"])
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para producir el DataFrame deseado con una nueva columna “A” que contenga un vector con 5 elementos (“A” a “E”), podemos usar el siguiente código:

    df_4 = transform(df_1, :a => (x -> uppercase.(x)) => :A)
    

    Esto aplicará la función anónima a la columna “a” y almacenará el resultado en una nueva columna “A”.

    La razón por la cual la segunda transformación en el código proporcionado devuelve un vector de Pairs con un nombre diferente al especificado es porque la sintaxis utilizada está creando una tupla con dos campos: el resultado de la transformación y el nombre de la columna objetivo. El vector resultante de Pairs tiene el nombre de la función de transformación (es decir, “a_function”) porque no se le asignó explícitamente un nombre diferente.

Comments are closed.