¿Cómo agregar una columna vacía a un marco de datos?

Resuelto kjo asked hace 11 años • 16 respuestas

¿Cuál es la forma más sencilla de agregar una columna vacía a un objeto Pandas DataFrame? Lo mejor que he encontrado es algo como

df['foo'] = df.apply(lambda _: '', axis=1)

¿Existe un método menos perverso?

kjo avatar May 02 '13 04:05 kjo
Aceptado

Si entiendo correctamente, la tarea debería completar:

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
   A  B
0  1  2
1  2  3
2  3  4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
   A  B C   D
0  1  2   NaN
1  2  3   NaN
2  3  4   NaN
DSM avatar May 01 '2013 21:05 DSM

Para agregar a la respuesta de DSM y desarrollar esta pregunta asociada , dividiría el enfoque en dos casos:

  • Agregar una sola columna: simplemente asigne valores vacíos a las nuevas columnas, por ejemplodf['C'] = np.nan

  • Agregar varias columnas: sugeriría usar el .reindex(columns=[...]) método de pandas para agregar las nuevas columnas al índice de columnas del marco de datos. Esto también funciona para agregar varias filas nuevas con .reindex(rows=[...]). Tenga en cuenta que las versiones más recientes de Pandas (v>0.20) le permiten especificar una axispalabra clave en lugar de asignarla explícitamente a columnso rows.

Aquí hay un ejemplo que agrega varias columnas:

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])

o

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1)  # version > 0.20.0

También siempre puedes concatenar un nuevo marco de datos (vacío) al marco de datos existente, pero eso no me parece tan pitónico :)

emunsing avatar Sep 09 '2016 06:09 emunsing

Me gusta:

df['new'] = pd.Series(dtype='int')

# or use other dtypes like 'float', 'object', ...

Si tiene un marco de datos vacío, esta solución garantiza que no NaNse agregue ninguna nueva fila que contenga solo.

No es estrictamente necesario especificarlo dtype; sin embargo, las versiones más recientes de Pandas producen un mensaje DeprecationWarningsi no se especifica.

Carsten avatar Jul 31 '2019 14:07 Carsten

una solución aún más simple es:

df = df.reindex(columns = header_list)                

donde "header_list" es una lista de los encabezados que desea que aparezcan.

cualquier encabezado incluido en la lista que aún no se encuentre en el marco de datos se agregará con celdas en blanco a continuación.

Así que si

header_list = ['a','b','c', 'd']

luego c y d se agregarán como columnas con celdas en blanco

liana avatar May 16 '2017 08:05 liana