¿Realmente quieres una columna que contenga cadenas vacías o más bien N/A?
filmor
Respuestas:
420
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
012123234>>> df["C"]="">>> df["D"]= np.nan
>>> df
A B C D
012NaN123NaN234NaN
Esta respuesta acaba de crear nuevas filas para mí.
logicbloke
@logicbloke, ¿puede proporcionar un ejemplo de lo que está sucediendo?
craymichael
@craymichael Ha pasado un tiempo, pero creo que tenía columnas indexadas por números sin nombres y filas con nombre, y simplemente creó una nueva fila al final.
logicbloke
1
Si el dfusuario está vacía, es posible que desee utilizar df['new'] = pd.Series() (véase mi respuesta a continuación)
Carsten
¿Cómo agregar múltiples columnas vacías?
M. Mariscal
46
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 axispalabra clave en lugar de asignarla explícitamente a columnso rows.
Ejemplo para version >= 0.20.0eliminar el DataFrame y agrega las nuevas columnas como filas. Ejemplo para version < 0.20.0trabajos bien en la versión de Pandas0.24.1
Lalo
@emunsing Mientras buscaba una respuesta a esta pregunta, finalmente encontré su respuesta útil. En un primer momento, sin embargo, no estaba trabajando para mí como pandas requiere , axis=1en 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.
Griff
@Griff: ahora he actualizado mi respuesta para que sea más precisa y explícita sobre los problemas de compatibilidad de versiones. Gracias por resaltar esto.
Emunsing
35
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
Más precisamente, las columnas se agregarán con NaNs.
broccoli2000
19
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 DFmuestra demostrada por @DSM:
df = pd.DataFrame({"A":[1,2,3],"B":[2,3,4]})
df
Out[18]:
A B
012123234
df.assign(C="",D=np.nan)Out[21]:
A B C D
012NaN123NaN234NaN
Tenga en cuenta que esto devuelve una copia con todas las columnas anteriores junto con las recién creadas. Para que el original DFse modifique en consecuencia, úselo como: df = df.assign(...)ya que actualmente no admite la inplaceoperación.
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:
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['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
N/A
?Respuestas:
Si entiendo correctamente, la tarea debe llenar:
fuente
df
usuario está vacía, es posible que desee utilizardf['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 unaaxis
palabra clave en lugar de asignarla explícitamente acolumns
orows
.Aquí hay un ejemplo que agrega varias columnas:
o
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 :)
fuente
version >= 0.20.0
eliminar el DataFrame y agrega las nuevas columnas como filas. Ejemplo paraversion < 0.20.0
trabajos bien en la versión de Pandas0.24.1
, axis=1
enversion = 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:
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
entonces cyd se agregarán como columnas con celdas en blanco
fuente
Comenzando con
v0.16.0
,DF.assign()
podría usarse para asignar nuevas columnas ( simples / múltiples ) aDF
. Estas columnas se insertan en orden alfabético al final deDF
.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: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 lainplace
operación.fuente
Me gusta:
Si tiene un marco de datos vacío, esta solución se asegura de que no
NaN
se agregue una nueva fila que solo contenga .Si
dtype
no se especifica, las nuevas versiones de Pandas producen aDeprecationWarning
.fuente
si desea agregar el nombre de columna de una lista
fuente
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:
fuente
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)
Enfoque 2 (para crear 64 columnas adicionales con nombres de columnas del 1 al 64)
fuente
Tu puedes hacer
fuente
Se puede usar
df.insert(index_to_insert_at, column_header, init_value)
para insertar una nueva columna en un índice específico.La declaración anterior insertaría una columna vacía después de la primera columna.
fuente