Lors de la mise à niveau de Pandas de 0.11 à 0.13.0rc1, les utilisateurs peuvent rencontrer de nombreux messages SettingWithCopyWarning. Un tel exemple est :
E:\FinReporter\FM_EXT.py:449: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_index,col_indexer] = value instead quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
Le SettingWithCopyWarning signale des affectations « enchaînées » potentiellement déroutantes comme :
df[df['A'] > 2]['B'] = new_val # new_val not set in df
Cela ne fonctionne pas toujours comme attendu, surtout lorsque la première sélection renvoie une copie. Pour résoudre ce problème, utilisez :
df.loc[df['A'] > 2, 'B'] = new_val
Dans l'extrait de code fourni :
quote_df['TVol'] = quote_df['TVol']/TVOL_SCALE
vous effectuez effectivement une affectation chaînée équivalente à :
quote_df = quote_df[quote_df['A'] > 2] quote_df['TVol'] = new_val
Ce modèle ne peut pas être distingué de l'exemple négatif et déclenche le avertissement.
Si vous êtes sûr que les écritures n'affecteront pas le cadre d'origine, désactivez l'avertissement avec :
import pandas as pd pd.options.mode.chained_assignment = None # default='warn'
Pour une meilleure compréhension, reportez-vous à ces ressources :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!