Python 3.4 e Pandas 0.15.0Pandas SettingWithCopyWarning
df è un dataframe e col1 è una colonna. Con il codice di seguito, sto controllando la presenza del valore 10 e sostituendo tali valori con 1000.
df.col1[df.col1 == 10] = 1000
Ecco un altro esempio. Questa volta, sto cambiando i valori in col2 in base all'indice.
df.col2[df.index == 151] = 500
Entrambi questi producono l'avvertimento di seguito:
-c:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
Infine,
cols = ['col1', 'col2', 'col3']
df[cols] = df[cols].applymap(some_function)
Questo produce un avviso simile, con un suggerimento aggiunto:
Try using .loc[row_indexer,col_indexer] = value instead
I' Non sono sicuro di aver capito il disco l'usanza indicata negli avvertimenti. Quale sarebbe un modo migliore per scrivere queste tre righe di codice?
Si noti che le operazioni hanno funzionato.
Grazie. Dovrebbe essere df.loc [row_index, 'col1'] = 100, giusto? –
@ asif.m sono ovviamente corretti al 100%. Lo aggiusterò –
Cosa suggerisci di fare per il terzo esempio (con "applymap")? –