¿Cómo agregar una columna vacía a un marco de datos?
¿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?
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
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 ejemplo
df['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 unaaxis
palabra clave en lugar de asignarla explícitamente acolumns
orows
.
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 :)
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 NaN
se 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 DeprecationWarning
si no se especifica.
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