Maison >développement back-end >Tutoriel Python >Comment comprendre et gérer le paramètre SettingWithCopyWarning de Pandas ?

Comment comprendre et gérer le paramètre SettingWithCopyWarning de Pandas ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 19:26:14137parcourir

How to Understand and Handle Pandas' SettingWithCopyWarning?

SettingWithCopyWarning : explication et gestion dans 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.

Comprendre l'avertissement

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

Gestion de l'avertissement

1. Ignorer l'avertissement

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'

2. Utilisation de loc et iloc

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]

3. Créer une copie

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']

4. Régénérer le DataFrame

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn