Quiero aplicar una función con argumentos a una serie en pandas python:
x = my_series.apply(my_function, more_arguments_1)
y = my_series.apply(my_function, more_arguments_2)
...
La documentación describe el soporte para un método de aplicación, pero no acepta ningún argumento. ¿Hay algún método diferente que acepte argumentos? Alternativamente, ¿me estoy perdiendo una solución simple?
Actualización (octubre de 2017):apply()
tenga en cuenta que, dado que esta pregunta se hizo originalmente, los pandas se actualizaron para manejar argumentos posicionales y de palabras clave y el enlace de documentación anterior ahora lo refleja y muestra cómo incluir cualquier tipo de argumento.
functools.partial
, ostarmap
?DataFrame.apply
documentos ySeries.apply
documentosRespuestas:
Las nuevas versiones de los pandas hacen permiten pasar argumentos adicionales (véase la nueva documentación ). Entonces ahora puedes hacer:
Los argumentos posicionales se agregan después del elemento de la serie.
Para versiones anteriores de pandas:
La documentación explica esto claramente. El método apply acepta una función python que debería tener un solo parámetro. Si desea pasar más parámetros, debe usar
functools.partial
según lo sugerido por Joel Cornett en su comentario.Un ejemplo:
También puede pasar argumentos de palabras clave usando
partial
.Otra forma sería crear una lambda:
Pero creo que usar
partial
es mejor.fuente
args
argumentos, que es una tupla que contiene argumentos posicionales adicionales o ** kwds para los nombrados. Creé un problema para tener esto también para Series.apply () github.com/pydata/pandas/issues/1829'abc'
,args=('abc')
se evaluará como tres argumentos('a', 'b', 'c')
. Para evitar esto, debe pasar una tupla que contiene la cadena, y para hacerlo, incluya una coma final:args=('abc',)
Pasos:
Ejemplo
El resultado de este ejemplo es que cada número en el marco de datos se agregará al número 9.
Explicación:
La función "agregar" tiene dos parámetros: i1, i2. El primer parámetro será el valor en el marco de datos y el segundo es lo que pasemos a la función "aplicar". En este caso, estamos pasando "9" a la función de aplicación utilizando el argumento de palabra clave "i2".
fuente
fuente
func
. Entonces, si deseo presentar una solicitud,pd.Series.mean(axis=1)
¿cómo ingreso elaxis=1
?Puede pasar cualquier número de argumentos a la función que
apply
está llamando a través de argumentos sin nombre, pasados como una tupla alargs
parámetro, o mediante otros argumentos de palabras clave capturados internamente como un diccionario por elkwds
parámetro.Por ejemplo, construyamos una función que devuelva True para valores entre 3 y 6, y False en caso contrario.
Esta función anónima no es muy flexible. Creemos una función normal con dos argumentos para controlar los valores mínimo y máximo que queremos en nuestra Serie.
Podemos replicar el resultado de la primera función pasando argumentos sin nombre a
args
:O podemos usar los argumentos nombrados
O incluso una combinación de ambos
fuente