2016-04-29 13 views
5

Ho un periodo di colonna di dataframe che ha valori per quarti (Q1, Q2, Q3, Q4) che voglio convertire in mese associato (vedi dict). Il mio codice qui sotto funziona comunque chiedendo perché sto ricevendo questo avviso.Un valore sta tentando di essere impostato su una copia di una sezione da un DataFrame

Un valore tenta di essere impostato su una copia di una sezione da un DataFrame. Provare a utilizzare .loc [row_indexer, col_indexer] = valore invece

quarter = {"Q1":"Mar","Q2":"Jun","Q3":"Sep","Q4":"Dec"} 
df['period'] = df['period'].astype(str).map(quarter) 

risposta

5

"Un valore sta cercando di essere impostato su una copia di una fetta da una dataframe" è un avvertimento. SO contiene molti post su questo argomento.

df.assign è stato aggiunto in Panda 0.16 ed è un buon modo per evitare questo avviso.

quarter = {"Q1": "Mar", "Q2": "Jun", "Q3": "Sep", "Q4": "Dec"} 
df = pd.DataFrame({'period': ['Q1', 'Q2', 'Q3', 'Q4', 'Q5'], 'qtr': [1, 2, 3, 4, 5]}) 

df 
    period qtr 
0  Q1 1 
1  Q2 2 
2  Q3 3 
3  Q4 4 
4  Q5 5 

df = df.assign(period=[quarter.get(q, q) for q in df.period]) 

# Unmapped values unchanged. 
>>> df 
    period qtr 
0 Mar 1 
1 Jun 2 
2 Sep 3 
3 Dec 4 
4  Q5 5 

df = pd.DataFrame({'period': ['Q1', 'Q2', 'Q3', 'Q4', 'Q5'], 'qtr': [1, 2, 3, 4, 5]}) 
df = df.assign(period=df.period.map(quarter)) 

# Unmapped values get `NaN`. 
>>> df 
    period qtr 
0 Mar 1 
1 Jun 2 
2 Sep 3 
3 Dec 4 
4 NaN 5 

Assegnare nuove colonne a una dataframe, restituendo un nuovo oggetto (una copia), con tutte le colonne originali in aggiunta a quelli nuovi.

.. :: versionadded 0.16.0

+0

Credo che nelle versioni precedenti l'avviso viene visualizzato in modo non corretto a volte. Non ricevo l'avviso in panda 0.18.0. Ma buono per imparare su assegnare. – ayhan

Problemi correlati