Maison >développement back-end >Tutoriel Python >Comment comprendre et gérer le paramètre SettingWithCopyWarning de Pandas ?
Le SettingWithCopyWarning, introduit dans Pandas 0.13.0rc1, alerte les utilisateurs des problèmes potentiels lors de la définition de valeurs sur des tranches ou des copies de DataFrames. Cet avertissement vise à éviter toute confusion et tout comportement inattendu.
L'avertissement survient en raison d'« affectations chaînées », dans lesquelles une valeur est définie sur une tranche ou une copie d'un DataFrame, par exemple comme :
df[df['A'] > 2]['B'] = new_val # new_val not set in df
Dans cet exemple, la première sélection (df[df['A'] > 2]) renvoie une copie, et tenter de définir « B » sur cette copie ne mettra pas à jour le DataFrame « df » d'origine. Pour mettre à jour correctement 'df', utilisez l'accesseur loc :
df.loc[df['A'] > 2, 'B'] = new_val
Si vous êtes certain de ne pas avoir besoin que les modifications soient reflétées dans le DataFrame d'origine, vous pouvez désactiver l'avertissement :
import pandas as pd pd.options.mode.chained_assignment = None # default='warn'
Pour les affectations sur tranches ou copies, utilisez les accesseurs loc ou iloc, qui permettent de modifier directement le DataFrame d'origine :
df.loc[df['A'] > 2, 'B'] = new_val df.iloc[2:5, 4] = [1, 8, 8]
Si vous avez besoin d'une nouvelle référence pour votre DataFrame, créez une copie à l'aide de DataFrame.copy() avant de la modifier :
new_df = df.copy() new_df['C'] = df['A'] + df['B']
Dans votre cas spécifique, au lieu de modifier le quote_df d'origine, vous pourriez régénérer un nouveau DataFrame avec les modifications souhaitées :
quote_df = pd.read_csv(StringIO(str_of_all), sep=',', names=list('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg')) quote_df.rename(columns={'A':'STK', 'B':'TOpen', ...}, inplace=True) quote_df['TVol'] = quote_df['TVol'] / TVOL_SCALE quote_df['TAmt'] = quote_df['TAmt'] / TAMT_SCALE quote_df['TDate'] = quote_df.TDate.map(lambda x: x[0:4]+x[5:7]+x[8:10])
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!