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 axis
parola chiave anziché assegnare esplicitamente a columns
o 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.0
cancella DataFrame e aggiunge le nuove colonne come righe. Esempio per version < 0.20.0
lavori su Pandas Version0.24.1
, axis=1
in 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 DF
esempio 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 DF
venga modificato di conseguenza, utilizzarlo come segue: df = df.assign(...)
poiché al momento non supporta l' inplace
operazione.
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
?