Modificando Dataframes
¿Cuando vamos a necesitar modificar un DataFrame? Una razón importante para la modificación es cuando necesitamos añadir una nueva entrada a la tabla, que normalmente se denomina fila. A veces necesitamos actualizar una fila específica, o incluso varias filas, en un dataframe.
En Pandas, las columnas son similares a las columnas que se usan en las bases de datos SQL. Nos permiten tener valores similares que caen bajo diferentes columnas. Una modificación común de un DataFrame es añadir una nueva columna si estamos ampliando el DataFrame para incluir más columnas y añadir más información.

Añadiendo una columna

Es posible que queramos añadir nueva información o realizar un cálculo basado en los datos que ya tenemos. Una forma de añadir una nueva columna es dando una lista de la misma longitud que el DataFrame existente. Supongamos que somos dueños de una ferretería y tenemos un DataFrame que contiene información de inventario:
1
df = pd.DataFrame([
2
[1, '3 inch screw', 0.5, 0.75],
3
[2, '2 inch nail', 0.10, 0.25],
4
[3, 'hammer', 3.00, 5.50],
5
[4, 'screwdriver', 2.50, 3.00]
6
],
7
columns=['Product ID', 'Description', 'Cost of Manufacture', 'Price']
8
)
Copied!
Parece que la cantidad de cada producto en nuestro almacén ha desaparecido! Usemos el siguiente código para añadir esa información a nuestro DataFrame.
1
df['Quantity'] = [100, 150, 50, 35]
2
print(df)
3
4
# Product ID Description Cost of Manufacture Price Quantity
5
# 0 1 3 inch screw 0.5 0.75 100
6
# 1 2 2 inch nail 0.1 0.25 150
7
# 2 3 hammer 3.0 5.50 50
8
# 3 4 screwdriver 2.5 3.00 35
Copied!
¿Podemos añadir la columna en una posicion especifica del DataFrame? Si. Especificando el index y usando insert(). Por ejemplo, si queremos que Quantity quede en la tercera columna (posicion-index 2), hacemos lo siguiente:
1
# df.insert(position, "new-column", data)
2
df.insert(2, Quantity, [100, 150, 50, 35])
Copied!

Añadiendo columnas

Tambien podemos añadir una columna que tendra el mismo valor para todas las filas. Supongamos que todos los productos estan en inventario, podemos hacer esto:
1
df['In stock'] = True
2
print(df)
3
4
# Product ID Description Cost of Manufature Price Quantity In stock
5
# 0 1 3 inch screw 0.5 0.75 100 True
6
# 1 2 2 inch nail 0.1 0.25 150 True
7
# 2 3 hammer 3.0 5.50 50 True
8
# 3 4 screwdriver 2.5 3.00 35 True
Copied!
Finalmente podemos añadir una columna que corra un funcion sobre las columnas. Por ejemplo si queremos una nueva columna con los impuestos
1
df['Sales Tax'] = df.Price * 0.075
2
print(df)
3
4
# Product ID Description Cost of Manufature Price Quantity In stock \
5
# 0 1 3 inch screw 0.5 0.75 100 True
6
# 1 2 2 inch nail 0.1 0.25 150 True
7
# 2 3 hammer 3.0 5.50 50 True
8
# 3 4 screwdriver 2.5 3.00 35 True
9
#
10
# Sales Tax
11
# 0 0.05625
12
# 1 0.01875
13
# 2 0.41250
14
# 3 0.22500
Copied!
¿Podemos correr opraciones entre mas de dos columnas de un dataframe? Si. De hecho no hay limite en que cantidad de columnas puedes correr funciones. Por ejemplo si tenemos 3 columnas: price, tax y quantity podemos hacer algo como esto:
1
df['Total'] = (df.Price + (df.Price * df['Sales Tax'])) * df.Quantity
2
print(df)
3
4
# Product ID Description Cost of Manufature Price Quantity In stock \
5
# 0 1 3 inch screw 0.5 0.75 100 True
6
# 1 2 2 inch nail 0.1 0.25 150 True
7
# 2 3 hammer 3.0 5.50 50 True
8
# 3 4 screwdriver 2.5 3.00 35 True
9
#
10
# Sales Tax Total
11
# 0 0.05625 79.218750
12
# 1 0.01875 38.203125
13
# 2 0.41250 388.437500
14
# 3 0.22500 128.625000
Copied!

Corriendo operaciones en columnas

A menudo queremos añadir una columna que está relacionada con las columnas existentes, pero que requieren un cálculo más complejo que multiplicar o sumar. Por ejemplo tenemos el siguiente dataframe:
1
df = pd.DataFrame([
2
['JHON SMITH', '[email protected]'],
3
['jane Doe', '[email protected]'],
4
['Jos schomo', '[email protected]']
5
],
6
columns=['Name', 'Email'])
Copied!
Es un poco rara la capitalización de las letras en cada fila. Nosotros queremos hacerlo más consistente cambiando todas las letras a mayúsculas. Podemos usar la función apply para cada valor en una columna en particular.
1
df['Name'] = df['Name'].str.upper()
2
print(df)
3
4
# Name Email
5
# 0 JHON SMITH [email protected]
6
# 1 JANE DOE [email protected]
7
# 2 JOS SCHOMO [email protected]
Copied!

Renombrando columnas

Es posible que tengamos que cambiar el nombre de una columna por otro que haga que los datos sean más claros para los usuarios. Por ejemplo, si tuviéramos un dataframe con información sobre las películas, y el nombre de la columna para los títulos de las películas se llamara simplemente "nombre", esto podría no ser obvio. Podríamos renombrar la columna a algo más claro como "movie_title".
Cuando obtenemos los datos de otras fuentes, normalmente vamos a querer cambiar los nombres de las columnas. Podamos cambiar los nombres de las columnas todas a la vez con el método .columns. pero tenga cuidado porque podríamos no etiquetar bien las columnas si lo hacemos en el orden incorrecto
1
df = pd.DataFrame({
2
'name': ['john', 'andrea', 'juliana', 'daniel'],
3
'age': [23, 25, 33, 34]
4
})
5
6
df.columns = ['First Name', 'Age']
7
print(df)
8
9
# First Name Age
10
# 0 john 23
11
# 1 andrea 25
12
# 2 juliana 33
13
# 3 daniel 34
Copied!
También podemos renombrar columnas de forma individual usando el método .rename. Pasando un diccionario con los argumentos: {'old_column_name1': 'new_column_name1', 'old_column2': 'new_column2'}
1
df = pd.DataFrame({
2
'name': ['john', 'andrea', 'juliana', 'daniel'],
3
'age': [23, 25, 33, 34]
4
})
5
6
df.rename(columns={
7
'name': 'First Name',
8
'age': 'Age'
9
}, inplace=True)
10
11
print(df)
12
13
# First Name Age
14
# 0 john 23
15
# 1 andrea 25
16
# 2 juliana 33
17
# 3 daniel 34
Copied!

Eliminando columnas

Se puede utilizar el metodo drop() para eliminar una columna en especifico y debemos especificar el eje con axis=1
1
df.drop(['Age'], axis=1, inplace=True)
2
print(df)
3
4
# First Name
5
# 0 john
6
# 1 andrea
7
# 2 juliana
8
# 3 daniel
Copied!
Last modified 5mo ago