El inplace
parámetro:
df.dropna(axis='index', how='all', inplace=True)
en Pandas
y en general significa:
1. Pandas crea una copia de los datos originales.
2. ... hace algunos cálculos sobre él
3. ... asigna los resultados a los datos originales.
4. ... elimina la copia.
Como puede leer en el resto de mi respuesta más abajo, todavía podemos tener una buena razón para usar este parámetro, es decir inplace operations
, el , pero deberíamos evitarlo si podemos, ya que genera más problemas, como:
1. Su código será más difícil de depurar (en realidad, SettingwithCopyWarning significa advertirle de este posible problema)
2. Conflicto con el encadenamiento de métodos
Entonces, ¿incluso hay un caso en el que deberíamos usarlo todavía?
Definitivamente si. Si usamos pandas o cualquier herramienta para manejar un gran conjunto de datos, podemos enfrentar fácilmente la situación, donde algunos grandes datos pueden consumir toda nuestra memoria. Para evitar este efecto no deseado, podemos utilizar algunas técnicas como el encadenamiento de métodos :
(
wine.rename(columns={"color_intensity": "ci"})
.assign(color_filter=lambda x: np.where((x.hue > 1) & (x.ci > 7), 1, 0))
.query("alcohol > 14 and color_filter == 1")
.sort_values("alcohol", ascending=False)
.reset_index(drop=True)
.loc[:, ["alcohol", "ci", "hue"]]
)
lo que hace que nuestro código sea más compacto (aunque más difícil de interpretar y depurar también) y consume menos memoria ya que los métodos encadenados funcionan con los valores devueltos del otro método, lo que resulta en una sola copia de los datos de entrada. Podemos ver claramente que tendremos 2 x consumo de memoria de datos original después de estas operaciones.
O podemos usar el inplace
parámetro (aunque más difícil de interpretar y depurar también) nuestro consumo de memoria será 2 x datos originales , pero nuestro consumo de memoria después de esta operación sigue siendo 1 x datos originales , que si alguien siempre trabajó con grandes conjuntos de datos sabe exactamente que puede ser un gran beneficio.
Conclusión final:
Evite el uso de inplace
parámetros a menos que no trabaje con datos enormes y sea consciente de sus posibles problemas en caso de seguir usándolos.
inplace=True
devuelveNone
inplace=False
devuelve una copia del objeto con la operación realizada. Los documentos son bastante claros al respecto, ¿hay algo que sea confuso con una parte específica? SpeficallyIf True, do operation inplace and return None.