Risposte:
Se ho capito bene, l'incarico dovrebbe riempire:
>>> 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è vuoto, potresti voler utilizzare df['new'] = pd.Series() (vedi la mia risposta di seguito)
Per aggiungere la risposta di DSM e basarsi su questa domanda associata , dividerei l'approccio in due casi:
Aggiunta di una singola colonna: basta assegnare valori vuoti alle nuove colonne, ad es df['C'] = np.nan
Aggiunta di più colonne: suggerirei di utilizzare il .reindex(columns=[...]) metodo dei panda per aggiungere le nuove colonne all'indice di colonna del frame di dati. Questo funziona anche per l'aggiunta di più nuove righe con .reindex(rows=[...]). Si noti che le versioni più recenti di Panda (v> 0.20) consentono di specificare una axisparola chiave anziché assegnare esplicitamente a columnso rows.
Ecco un esempio di aggiunta di più colonne:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
o
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Puoi anche concatenare sempre un nuovo (vuoto) frame di dati al frame di dati esistente, ma per me non mi sembra pitone :)
version >= 0.20.0cancella DataFrame e aggiunge le nuove colonne come righe. Esempio per version < 0.20.0lavori su Pandas Version0.24.1
, axis=1in version = 0.25. Ho provato a modificare la tua risposta per includere la versione aggiornata, ma sono stato rifiutato da @kenlukas e @il_raffa. Spero che tutti faticano a capire perché la tua risposta non funziona per loro - come me - almeno si imbatte in questo commento.
una soluzione ancora più semplice è:
df = df.reindex(columns = header_list)
dove "header_list" è un elenco delle intestazioni che si desidera visualizzare.
qualsiasi intestazione inclusa nell'elenco che non si trova già nel frame di dati verrà aggiunta con celle vuote in basso.
quindi se
header_list = ['a','b','c', 'd']
quindi c e d verranno aggiunti come colonne con celle vuote
A partire da v0.16.0, DF.assign()potrebbe essere utilizzato per assegnare nuove colonne ( singole / multiple ) a DF. Queste colonne vengono inserite in ordine alfabetico alla fine di DF.
Ciò diventa vantaggioso rispetto alla semplice assegnazione nei casi in cui si desidera eseguire una serie di operazioni concatenate direttamente sul frame di dati restituito.
Considera lo stesso DFesempio dimostrato da @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
Si noti che questo restituisce una copia con tutte le colonne precedenti insieme a quelle appena create. Affinché l'originale DFvenga modificato di conseguenza, utilizzarlo come segue: df = df.assign(...)poiché al momento non supporta l' inplaceoperazione.
se si desidera aggiungere il nome della colonna da un elenco
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
La risposta di @ emunsing è davvero interessante per l'aggiunta di più colonne, ma non sono riuscito a farlo funzionare per me in Python 2.7. Invece, ho trovato che funziona:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Il codice seguente risponde alla domanda "Come faccio ad aggiungere n numero di colonne vuote al mio frame di dati esistente". Nell'interesse di conservare soluzioni a problemi simili in un unico posto, lo sto aggiungendo qui.
Approccio 1 (per creare 64 colonne aggiuntive con nomi di colonna da 1-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
Approccio 2 (per creare 64 colonne aggiuntive con nomi di colonna da 1-64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
Tu puoi fare
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
Si può usare df.insert(index_to_insert_at, column_header, init_value)per inserire una nuova colonna in un indice specifico.
cost_tbl.insert(1, "col_name", "")
L'istruzione precedente inserirà una colonna vuota dopo la prima colonna.
N/A?