Anexando fila a Pandas DataFrame agrega 0 columnas

Estoy creando un Pandas DataFrame para almacenar datos. Desafortunadamente, no puedo saber la cantidad de filas de datos que tendré antes de tiempo. Así que mi enfoque ha sido el siguiente.

Primero, declaro un DataFrame vacío.

df = DataFrame(columns=['col1', 'col2']) 

Luego, agrego una fila de valores perdidos.

 df = df.append([None] * 2, ignore_index=True) 

Finalmente, puedo insertar valores en este DataFrame una celda a la vez. (Por qué tengo que hacer esto una celda a la vez es una larga historia).

 df['col1'][0] = 3.28 

Este enfoque funciona perfectamente bien, con la excepción de que la statement adjunta inserta una columna adicional en mi DataFrame. Al final del proceso, la salida que veo cuando df ve así (con 100 filas de datos).

  Data columns (total 2 columns): 0 0 non-null values col1 100 non-null values col2 100 non-null values 

df.head() ve así.

  0 col1 col2 0 None 3.28 1 1 None 1 0 2 None 1 0 3 None 1 0 4 None 1 1 

¿Alguna idea sobre qué está causando que esta columna 0 aparezca en mi DataFrame?

El anexo está intentando agregar una columna a su dataframe. La columna que está intentando agregar no tiene nombre y tiene dos elementos Ninguno / Nan en ella, que los pandas nombrarán (de manera predeterminada) como columna llamada 0.

Para hacer esto con éxito, los nombres de las columnas que vienen en el anexo del dataframe deben ser consistentes con los nombres de las columnas del dataframe actual o, de lo contrario, se crearán nuevas columnas (de forma predeterminada)

 #you need to explicitly name the columns of the incoming parameter in the append statement df = DataFrame(columns=['col1', 'col2']) print df.append(Series([None]*2, index=['col1','col2']), ignore_index=True) #as an aside df = DataFrame(np.random.randn(8, 4), columns=['A','B','C','D']) dfRowImproper = [1,2,3,4] #dfRowProper = DataFrame(arange(4)+1,columns=['A','B','C','D']) #will not work!!! because arange returns a vector, whereas DataFrame expect a matrix/array# dfRowProper = DataFrame([arange(4)+1],columns=['A','B','C','D']) #will work print df.append(dfRowImproper) #will make the 0 named column with 4 additional rows defined on this column print df.append(dfRowProper) #will work as you would like as the column names are consistent print df.append(DataFrame(np.random.randn(1,4))) #will define four additional columns to the df with 4 additional rows print df.append(Series(dfRow,index=['A','B','C','D']), ignore_index=True) #works as you want 

Podría usar una Series para la inserción de filas:

 df = pd.DataFrame(columns=['col1', 'col2']) df = df.append(pd.Series([None]*2), ignore_index=True) df["col1"][0] = 3.28 

df parece a

  col1 col2 0 3.28 NaN