[PYTHON] pandas SettingWithCopyWarning

introduction

Si vous faisiez une application qui manipule les fichiers csv à l'aide de pandas, Le résultat est édité comme prévu, J'ai été averti que SettingWithCopyWarning.

SettingWithCopyWarning Je pense que c'est un avertissement car c'est passé par référence (qu'est-ce que c'est?). Lorsqu'une partie des données d'origine est extraite → affectée à une partie de celles-ci Souhaitez-vous modifier "cette partie des données d'origine"? Vous ne savez pas si vous vouliez créer "de nouvelles données avec quelques modifications"?

N'hésitez pas à commenter dans les commentaires.

Solution

Si vous spécifiez dans copy () qu'il s'agit d'une copie et non d'une référence, SettingWithCopyWarning a été résolu.

Une application qui organise vos fruits préférés dans un fichier csv

Premier, Dans un répertoire (dossier) appelé output_files Créez un fichier csv nommé data.csv.

Le contenu est apple,8 orange,15 banana,4 apple,1 Il est devenu.

data.csv


apple,8
orange,15
banana,4
apple,1

Ce fichier csv Supprimer la pomme, 1 et Réécrit sur apple, 9

data.csv


apple,9
orange,15
banana,4

Le but est d'éditer.

check_data.py


import pandas as pd

def check():
    df = pd.read_csv('output_files/data.csv', names=['fru_name', 'count'])
    #Le plus souvent dans vc(Dupliquer)Conserver les fruits
    vc = df['fru_name'].value_counts().index[0]
    #Stocker le nombre d'occurrences en fre
    fre = df['fru_name'].value_counts().iat[0]

    if fre > 1:
        #Supprimez la ligne de fruits en double et changez-la en variable new_Stocker dans les données
        new_data = df.drop_duplicates(subset='fru_name')

        #Duper le nombre original de fruits en double_Stocker en nombre
        dup_count = int(new_data.loc[new_data['fru_name'] == vc, 'count'])
        # dup_compter+1
        dup_count += 1
        new_data.loc[new_data['fru_name'] == vc, 'count'] = dup_count

        #data.Écraser le csv
        new_data.to_csv('output_files/data.csv', index=False, header=False)

check()

python

SettingWithCopyWarning

Le fichier csv est comme prévu

data.csv


apple,9
orange,15
banana,4

A été édité, mais SettingWithCopyWarning est émis.

Amélioration

Dans copy (), pour indiquer clairement qu'il s'agit d'une copie et non d'une référence

python


new_data = df.drop_duplicates(subset='fru_name')

À

python


#copy()Être explicitement une copie, pas une référence
new_data = df.drop_duplicates(subset='fru_name').copy()

changer en.

check_data2.py


import pandas as pd

def check():
    df = pd.read_csv('output_files/data.csv', names=['fru_name', 'count'])
    #Le plus souvent dans vc(Dupliquer)Conserver les fruits
    vc = df['fru_name'].value_counts().index[0]
    #Stocker le nombre d'occurrences en fre
    fre = df['fru_name'].value_counts().iat[0]

    if fre > 1:
        #Supprimez la ligne de fruits en double et changez-la en variable new_Stocker dans les données
        new_data = df.drop_duplicates(subset='fru_name').copy()

        #Duper le nombre original de fruits en double_Stocker en nombre
        dup_count = int(new_data.loc[new_data['fru_name'] == vc, 'count'])
        # dup_compter+1
        dup_count += 1
        new_data.loc[new_data['fru_name'] == vc, 'count'] = dup_count

        #data.Écraser le csv
        new_data.to_csv('output_files/data.csv', index=False, header=False)

check()

avec ça, Sans SettingWithCopyWarning, Le fichier csv est comme prévu Il est venu pour être édité.

Recommended Posts

pandas SettingWithCopyWarning
Pandas
Mémo Pandas
Notes de pandas
Mémorandum de Pandas
mémo pandas
mémo d'auto-apprentissage pandas
Mes pandas (Python)
Excel-> pandas-> sqlite
[pandas] Conseils GroupBy
lecture de données pandas
À propos de décrire les pandas
liens relatifs aux pandas
Pandas de valeur manquante
9rep - Pandas MySQL
Mémorandum d'opération Pandas
Trier par pandas
mémo pandas python
série pandas partie 1
[Note] les pandas se désempilent