Respuestas:
Si entiendo correctamente, la tarea debe llenar:
>>> 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
df
usuario está vacía, es posible que desee utilizar df['new'] = pd.Series()
(véase mi respuesta a continuación)
Para agregar a la respuesta de DSM y construir sobre 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 una axis
palabra clave en lugar de asignarla explícitamente a columns
o 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 puede concatenar un nuevo marco de datos (vacío) al marco de datos existente, pero eso no me parece tan pitónico :)
version >= 0.20.0
eliminar el DataFrame y agrega las nuevas columnas como filas. Ejemplo para version < 0.20.0
trabajos bien en la versión de Pandas0.24.1
, axis=1
en version = 0.25
. Intenté modificar su respuesta para incluir la versión actualizada, pero @kenlukas y @il_raffa me rechazaron. Espero que todos los que luchan por entender por qué su respuesta no les está funcionando, como a mí, al menos se encuentran con este comentario.
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 no se encuentre ya en el marco de datos se agregará con celdas en blanco a continuación.
Así que si
header_list = ['a','b','c', 'd']
entonces cyd se agregarán como columnas con celdas en blanco
Comenzando con v0.16.0
, DF.assign()
podría usarse para asignar nuevas columnas ( simples / múltiples ) a DF
. Estas columnas se insertan en orden alfabético al final de DF
.
Esto se vuelve ventajoso en comparación con la asignación simple en los casos en que desea realizar una serie de operaciones encadenadas directamente en el marco de datos devuelto.
Considere la misma DF
muestra demostrada por @DSM:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
A B
0 1 2
1 2 3
2 3 4
df.assign(C="",D=np.nan)
Out[21]:
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
Tenga en cuenta que esto devuelve una copia con todas las columnas anteriores junto con las recién creadas. Para que el original DF
se modifique en consecuencia, úselo como: df = df.assign(...)
ya que actualmente no admite la inplace
operación.
si desea agregar el nombre de columna de una lista
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
La respuesta de @emunsing es realmente genial para agregar varias columnas, pero no pude hacer que funcione para mí en Python 2.7. En cambio, encontré que esto funciona:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
El siguiente código aborda la pregunta "¿Cómo agrego un número n de columnas vacías a mi marco de datos existente?". En el interés de mantener soluciones a problemas similares en un lugar, lo estoy agregando aquí.
Enfoque 1 (para crear 64 columnas adicionales con nombres de columnas del 1 al 64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
Enfoque 2 (para crear 64 columnas adicionales con nombres de columnas del 1 al 64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Tu puedes hacer
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
Se puede usar df.insert(index_to_insert_at, column_header, init_value)
para insertar una nueva columna en un índice específico.
cost_tbl.insert(1, "col_name", "")
La declaración anterior insertaría una columna vacía después de la primera columna.
N/A
?