[PYTHON] pandas SettingWithCopyWarning

Einführung

Wenn Sie eine App erstellt haben, die CSV-Dateien mit Pandas bearbeitet, Das Ergebnis wird wie erwartet bearbeitet. Ich wurde gewarnt, dass SettingWithCopyWarning.

SettingWithCopyWarning Ich denke, es ist eine Warnung, weil sie als Referenz übergeben wird (was ist das?). Wenn ein Teil der Originaldaten extrahiert wird → einem Teil davon zugewiesen wird Wollten Sie "diesen Teil der Originaldaten" ändern? Sie wissen nicht, ob Sie "neue Daten mit einigen Änderungen" erstellen wollten?

Fühlen Sie sich frei, in den Kommentaren zu kommentieren.

Lösung

Wenn Sie in copy () angeben, dass es sich um eine Kopie handelt, nicht um eine Referenz, SettingWithCopyWarning wurde behoben.

Eine App, die Ihre Lieblingsfrüchte in einer CSV-Datei organisiert

Zuerst, In einem Verzeichnis (Ordner) namens output_files Erstellen Sie eine CSV-Datei mit dem Namen data.csv.

Der Inhalt ist apple,8 orange,15 banana,4 apple,1 Es ist geworden.

data.csv


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

Diese CSV-Datei Löschen Sie Apfel, 1 und Umgeschrieben auf Apfel, 9

data.csv


apple,9
orange,15
banana,4

Das Ziel ist zu bearbeiten.

check_data.py


import pandas as pd

def check():
    df = pd.read_csv('output_files/data.csv', names=['fru_name', 'count'])
    #Am häufigsten in vc(Duplikat)Obst lagern
    vc = df['fru_name'].value_counts().index[0]
    #Speichern Sie die Anzahl der Vorkommen in fre
    fre = df['fru_name'].value_counts().iat[0]

    if fre > 1:
        #Entfernen Sie die doppelte Fruchtlinie und ändern Sie sie in die Variable new_In Daten speichern
        new_data = df.drop_duplicates(subset='fru_name')

        #Dup die ursprüngliche Anzahl von doppelten Früchten_In Anzahl speichern
        dup_count = int(new_data.loc[new_data['fru_name'] == vc, 'count'])
        # dup_Anzahl+1
        dup_count += 1
        new_data.loc[new_data['fru_name'] == vc, 'count'] = dup_count

        #data.CSV überschreiben
        new_data.to_csv('output_files/data.csv', index=False, header=False)

check()

python

SettingWithCopyWarning

Die CSV-Datei ist wie vorgesehen

data.csv


apple,9
orange,15
banana,4

Wurde aber bearbeitet SettingWithCopyWarning wird ausgegeben.

Verbesserung

In copy (), um zu verdeutlichen, dass es sich um eine Kopie handelt, nicht um eine Referenz

python


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

Zu

python


#copy()Seien Sie explizit eine Kopie, keine Referenz
new_data = df.drop_duplicates(subset='fru_name').copy()

ändern.

check_data2.py


import pandas as pd

def check():
    df = pd.read_csv('output_files/data.csv', names=['fru_name', 'count'])
    #Am häufigsten in vc(Duplikat)Obst lagern
    vc = df['fru_name'].value_counts().index[0]
    #Speichern Sie die Anzahl der Vorkommen in fre
    fre = df['fru_name'].value_counts().iat[0]

    if fre > 1:
        #Entfernen Sie die doppelte Fruchtlinie und ändern Sie sie in die Variable new_In Daten speichern
        new_data = df.drop_duplicates(subset='fru_name').copy()

        #Dup die ursprüngliche Anzahl von doppelten Früchten_In Anzahl speichern
        dup_count = int(new_data.loc[new_data['fru_name'] == vc, 'count'])
        # dup_Anzahl+1
        dup_count += 1
        new_data.loc[new_data['fru_name'] == vc, 'count'] = dup_count

        #data.CSV überschreiben
        new_data.to_csv('output_files/data.csv', index=False, header=False)

check()

mit diesem, Ohne SettingWithCopyWarning Die CSV-Datei ist wie vorgesehen Es wurde bearbeitet.

Recommended Posts

pandas SettingWithCopyWarning
Pandas
Pandas Memo
Pandas Notizen
Memorandum of Pandas
Pandas Memo
Pandas Selbststudium Memo
Meine Pandas (Python)
Excel-> Pandas-> SQLite
[Pandas] GroupBy-Tipps
Pandas Daten lesen
Über beschreiben Pandas
Pandas verwandte Links
Pandas mit fehlendem Wert
9rep - Pandas MySQL
Pandas Operations Memorandum
Nach Pandas sortieren
Python Pandas Memo
Pandas Serie Teil 1
[Anmerkung] Pandas entstapeln