Aggiungi colonna al frame di dati con valore costante


187

Ho un dataframe esistente al quale devo aggiungere una colonna aggiuntiva alla quale conterrà lo stesso valore per ogni riga.

Df esistente:

Date, Open, High, Low, Close
01-01-2015, 565, 600, 400, 450

Nuovo df:

Name, Date, Open, High, Low, Close
abc, 01-01-2015, 565, 600, 400, 450

So come aggiungere una colonna serie / dataframe esistente. Ma questa è una situazione diversa, perché tutto ciò di cui ho bisogno è aggiungere la colonna "Nome" e impostare ogni riga sullo stesso valore, in questo caso "abc".

Risposte:


295

df['Name']='abc' aggiungerà la nuova colonna e imposterà tutte le righe su quel valore:

In [79]:

df
Out[79]:
         Date, Open, High,  Low,  Close
0  01-01-2015,  565,  600,  400,    450
In [80]:

df['Name'] = 'abc'
df
Out[80]:
         Date, Open, High,  Low,  Close Name
0  01-01-2015,  565,  600,  400,    450  abc

35
C'è un altro modo di fare questo? Ricevo il seguente avvertimento. Un valore sta tentando di essere impostato su una copia di una sezione da un DataFrame. Prova invece a utilizzare .loc [row_indexer, col_indexer] = value. Vedi le avvertenze nella documentazione: pandas.pydata.org/pandas-docs/stable/…
vishnu viswanath,

3
Ciò significa che stai assegnando a qualcosa che è una copia e non il df originale, non posso commentare ulteriormente senza vedere i dati e il tuo codice sotto forma di una domanda. Rispondere alle domande nei commenti è controproducente. Questo codice funziona, hai già fatto qualcosa per sollevare l'avvertimento
EdChum,

@vishnuviswanath Ricevo lo stesso identico avviso quando uso Jupyter Notebook. Mi succede quando ho dimensioni DataFrame non banali (> 200 record) e alcune combinazioni di assegnazione e semplicemente stampando il df.
Bill

4
@vishnuviswanath probabilmente hai già creato una porzione del frame di dati originale prima di questo, e quindi provando a impostare la nuova colonna su quella sezione. Aggiungi invece la nuova colonna al frame di dati originale e quindi crea la sezione successiva. Probabilmente quando crei una porzione di un frame di dati, Panda non crea una copia e in qualche modo la gestisce dal frame di dati originale. Questo tipo di pasticciare con quell'ottimizzazione, e quindi l'avvertimento.
amit_saxena,

2
Per ovviare alla segnalazione di panda menzionata, basta ottenere una copia del dataframe utilizzando .copy(), prima di utilizzare questo (a meno che non sia enorme o qualcosa o le prestazioni contino davvero).
matanster

61

Puoi usare insertper specificare dove vuoi che sia la nuova colonna. In questo caso, utilizzo 0per posizionare la nuova colonna a sinistra.

df.insert(0, 'Name', 'abc')

  Name        Date  Open  High  Low  Close
0  abc  01-01-2015   565   600  400    450

Questo non funziona per me. La mia matrice originale è 1460 x 41 e sto tentando di aggiungere una colonna di 1 di al fronte: df.insert(0,'coef_fix',1). Sto usando JupyterLab con Python 3.0
ColinMac il

2
Funziona bene per me. Potresti non aver capito che insertfunziona inplace. Ciò significa che il valore del nuovo frame di dati non viene restituito ma il frame di dati originale è stato modificato. Prova questodf = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared il

44

La fodera singola funziona

df['Name'] = 'abc'

Crea una Namecolonna e imposta tutte le righe sul abcvalore


41

Riassumendo ciò che gli altri hanno suggerito e aggiungendo una terza via

Puoi:

  • assegnare (** kwargs) :

    df.assign(Name='abc')
  • accedi alla nuova serie di colonne (verrà creata) e impostala:

    df['Name'] = 'abc'
  • inserisci (loc, colonna, valore, allow_duplicates = False)

    df.insert(0, 'Name', 'abc')

    dove l'argomento loc (0 <= loc <= len (colonne)) consente di inserire la colonna nel punto desiderato.

    'loc' ti dà l'indice in cui si troverà la tua colonna dopo l'inserimento. Ad esempio, il codice sopra inserisce il nome della colonna come la colonna 0, ovvero verrà inserito prima della prima colonna, diventando la nuova prima colonna. (L'indicizzazione inizia da 0).

Tutti questi metodi consentono di aggiungere una nuova colonna anche da una serie (basta sostituire l'argomento predefinito 'abc' sopra con la serie).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.