Pandas: Cómo crear un DataFrame vacío y agregar datos

Publicado el 16 noviembre 2020 por Daniel Rodríguez @analyticslane

El objeto DataFrame es uno de los elementos clave de la librería Pandas. En esta entrada vamos a ver las opciones que existen para crear un DataFrame vacío y agregar datos. Lo que nos enseñara además algunos de los métodos que existen para modificar el contenido de un DataFrame.

Creación de un DataFrame vacío

Un DataFrame vacío se puede crear utilizando el constructor DataFrame de Pandas sin ningún parámetro. Algo que nos devuelve un objeto sin columnas ni índices.

import pandas as pd

df = pd.DataFrame()
Empty DataFrame
Columns: []
Index: []

Ahora para agregar datos, solamente se tiene que asignar a una nueva serie los datos que deseemos. Por ejemplo, se puede crear un DataFrame con nombre, apellidos y géneros de unos usuarios.

df['first_name'] = ['Josy', 'Vaughn', 'Neale', 'Teirtza']
df['last_name'] = ['Clarae', 'Halegarth', 'Georgievski', 'Teirtza']
df['gender'] = ['Female', 'Male', 'Male', 'Female']
  first_name    last_name  gender
0       Josy       Clarae  Female
1     Vaughn    Halegarth    Male
2      Neale  Georgievski    Male
3    Teirtza      Teirtza  Female

Como se puede ver en el ejemplo, no es necesario definir columnas antes de usar estas, algo es muy útil cuando se desea agregar nuevas series a un DataFrame existente.

Creación de un DataFrame vacío con columnas

Quizás en la mayoría de los casos no vamos a querer partir de un DataFrame completamente vacío. Sino que ya conoceremos el nombre de las series que queremos usar en este. Así se puede crear un DataFrame vacío con columnas indicando mediante el parámetro columns los nombres de estas. Por ejemplo, para el caso anterior se puede crear.

df = pd.DataFrame(columns=['first_name', 'last_name', 'gender'])
Empty DataFrame
Columns: [first_name, last_name, gender]
Index: []

Ahora, se puede agregar registro a registro al DataFrame utilizando para ellos el método append. Un método al que es necesario pasarle un diccionario con los valores e indicar la opción ignore_index a verdadero. Así se puede agregar registros al DataFrame de la siguiente manera.

df = df.append({'first_name': 'Josy', 'last_name':'Clarae', 'gender':'Female'}, ignore_index=True)
df = df.append({'first_name': 'Vaughn', 'last_name':'Halegarth', 'gender':'Male'}, ignore_index=True)
  first_name  last_name  gender
0       Josy     Clarae  Female
1     Vaughn  Halegarth    Male

Creación de un DataFrame vacío con columnas e índices

También es posible crear un DataFrame vacío en Pandas con las columnas e índices ya asignados. En este caso todos los registros del DataFrame serán NaN, ya que no tendrán ningún valor asignado.

df = pd.DataFrame(columns=['first_name', 'last_name', 'gender'],
                  index=range(3))
  first_name last_name gender
0        NaN       NaN    NaN
1        NaN       NaN    NaN
2        NaN       NaN    NaN

En este caso la forma más fácil de asignar los registros es mediante la propiedad iloc de los DataFrames. Una propiedad con la que se puede asignar fila a fila utilizando listas o tuplas. Así se puede rellenar los datos del objeto que acabamos de crear de la siguiente manera.

df.iloc[0] = ('Josy', 'Clarae', 'Female')
df.iloc[1] = ['Vaughn', 'Halegarth', 'Male']
df.iloc[2] = ('Neale', 'Georgievski', 'Male')
  first_name    last_name  gender
0       Josy       Clarae  Female
1     Vaughn    Halegarth    Male
2      Neale  Georgievski    Male

Donde se puede ver que asignar una lista o una tupla a las filas es algo indiferente a efectos prácticos.

Conclusiones

En la entrada de hoy hemos visto cómo crear un DataFrame vacío y agregar datos en Pandas de tres modos diferentes. Creando un DataFrame vacío, un DataFrame con columnas y un DataFrame con columnas e índices. Agregando además los datos de una forma diferente en cada caso. ¿Cuál de los tres métodos os parece más adecuado? Podéis dejar vuestras opiniones en los comentarios.