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
Libérer: 2024-12-26 19:26:14
original
152 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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'
Copier après la connexion

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]
Copier après la connexion

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']
Copier après la connexion

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])
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal