En el tutorial de hoy, aprenderemos cómo escribir valores específicos en una columna DataFrame de pandas nueva o existente. Veremos varios casos de uso.
Datos de ejemplo
Comenzaremos definiendo un conjunto de datos simple:
import pandas as pd dates = pd.date_range(start="3/1/24", end = '3/08/24', freq='B') sales = [284, 472, 361, 269, 386, 401] revenue = pd.DataFrame (dict (dates=dates, sales=sales)) print (revenue.head())
Aquí están nuestros datos:
fechasventas0123452024-03-01 | 284 |
2024-03-04 | 472 |
2024-03-05 | 361 |
2024-03-06 | 269 |
2024-03-07 | 386 |
2024-03-08 | 401 |
Escriba un solo valor en una columna de pandas
El primer ejemplo será usar el método de asignación de marco de datos para agregar una columna que contenga un solo valor en nuestro marco de datos de pandas. En nuestro caso, configuraremos todas las columnas de la columna del canal para que sean iguales a Web.
revenue = revenue.assign(channel="Web") print (revenue.head(6))
Aquí están nuestros datos:
fechasventascanal0123452024-03-01 | 284 | Web |
2024-03-04 | 472 | Web |
2024-03-05 | 361 | Web |
2024-03-06 | 269 | Web |
2024-03-07 | 386 | Web |
2024-03-08 | 401 | Web |
Llenar columna con columna basada en otra columna
De la misma manera, nos gustaría introducir una nueva columna denominada margen. Históricamente, sabemos que nuestro margen operativo es del 25 %, por lo que aplicaremos esta lógica a los datos:
revenue = revenue.assign(margin = revenue['sales'] * 0.25)
También podemos usar una asignación directa o una función lambda aquí:
revenue['margin'] = revenue['sales'] * 0.25
O usando una función lambda:
revenue ['margin'] = revenue.apply(lambda r : r['sales'] *0.25 , axis = 1)
Si usa el método de aplicación con la función lambda, asegúrese de especificar el eje del parámetro = 1 para asegurarse de que el cálculo se ejecutará en el eje de la columna, lo que significa que la función se aplicará a cada fila.
Todo lo anterior dará como resultado lo siguiente:
print(revenue.head(6))
fechasmargen de ventas0123452024-03-01 | 284 | 71.00 |
2024-03-04 | 472 | 118.00 |
2024-03-05 | 361 | 90.25 |
2024-03-06 | 269 | 67.25 |
2024-03-07 | 386 | 96.50 |
2024-03-08 | 401 | 100.25 |
Llenar columna con números crecientes
En nuestro caso podemos usar el siguiente código:
revenue ['order'] = revenue.index + 1
Escribir valores aleatorios de la lista a la columna
A continuación, nos gustaría modificar la columna del canal y llenarla con valores aleatorios de una lista de Python.
import random rand_lst = random.choices (['Web', 'Indirect', 'Direct'], k = len(revenue) )
Seguir el aprendizaje
¿Cómo filtrar un DataFrame de pandas por valor en una o más columnas?