Anwendung von Python: Datenbereinigung Teil 2: Datenbereinigung mit DataFrame

CSV

CSV mit Pandas lesen

CSV ist eine Datei, in der Werte durch Kommas getrennt sind. Es wird häufig verwendet, da es bei der Datenanalyse sehr einfach zu handhaben ist.

Verwenden Sie die Funktion read_csv (), um eine CSV-Datei mit Pandas zu lesen.

read_csv("Dateipfad, in dem sich die CSV-Datei befindet", header=)

Als das Gesetz des Headers

Lesen Sie beispielsweise ein Wein-Dataset, das keine Spaltennameninformationen aus dem Verzeichnis enthält. Da wir nicht wissen, was der numerische Wert so darstellt, wie er ist, fügen Sie einen Spaltennamen (Spalte) hinzu, der den Inhalt des Werts angibt.

import pandas as pd

df = pd.read_csv("./4050_data_cleansing_data/wine.csv", header=None)

#Fügen Sie eine Spalte hinzu, um zu sehen, was jede Zahl darstellt
df.columns = ["", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium","Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins","Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]
df

Das ./ im Dateipfad gibt das aktuelle Verzeichnis an. Das aktuelle Verzeichnis ist das Arbeitsverzeichnis, in dem Python gerade ausgeführt wird.

CSV mit CSV-Bibliothek erstellen

Erstellen Sie eine CSV-Datendatei mit der CSV-Bibliothek, die standardmäßig in Python 3 enthalten ist.

Gibt die Daten der Stadt, des Jahres und der Saison der letzten 10 Olympischen Spiele als CSV-Datendatei aus.

import csv

#Verwenden Sie die with-Anweisung
# csv0.Schreibmodus mit der CSV-Datei als Variable CSV-Datei ("w") Öffnen
with open("./4050_data_cleansing_data/csv0.csv", "w") as csvfile:
    #Als Argumente für die Writer-Methode werden die Variable csvfile und der Zeilenvorschubcode (\n)
    writer = csv.writer(csvfile, lineterminator="\n")
    #Fügen Sie eine Zeile mit writerow (Liste) hinzu.
    writer.writerow(["city", "year", "season"])
    writer.writerow(["Nagano", 1998, "winter"])
    writer.writerow(["Sydney", 2000, "summer"])
    writer.writerow(["Salt Lake City", 2002, "winter"])
    writer.writerow(["Athens", 2004, "summer"])
    writer.writerow(["Torino", 2006, "winter"])
    writer.writerow(["Beijing", 2008, "summer"])
    writer.writerow(["Vancouver", 2010, "winter"])
    writer.writerow(["London", 2012, "summer"])
    writer.writerow(["Sochi", 2014, "winter"])
    writer.writerow(["Rio de Janeiro", 2016, "summer"])

#Ausgabe
# csv0.Lesemodus mit CSV-Datei als Variable CSV-Datei("r")Öffnen mit
with open("./4050_data_cleansing_data/csv0.csv", "r") as csvfile:
    print(csvfile.read())

Bei der Ausführung wird eine CSV-Datendatei mit dem Namen csv0.csv erstellt und der Inhalt der Daten angezeigt. Um herauszufinden, wo die CSV-Datendatei erstellt wurde

import os #Machen
print(os.getcwd()) #Ausführen.

Erstellen einer CSV mit Pandas

Ohne Verwendung der CSV-Bibliothek Sie können CSV-Daten auch mit Pandas erstellen. Es ist bequemer, Pandas zu verwenden, wenn Daten im PandasDataFrame-Format in CSV-Daten konvertiert werden.

Verwenden Sie die Funktion to_csv (), um eine CSV-Datei mit Pandas zu erstellen.

to_csv("Name der zu erstellenden CSV-Datei")

Als Beispiel für DataFrame werden wie im vorherigen Beispiel die Daten der Stadt, des Jahres und der Saison der letzten 10 Olympischen Spiele als CSV-Datendatei ausgegeben.

import pandas as pd

data = {"city": ["Nagano", "Sydney", "Salt Lake City", "Athens", "Torino", "Beijing", "Vancouver", "London", "Sochi", "Rio de Janeiro"], 
        "year": [1998, 2000, 2002, 2004, 2006, 2008, 2010, 2012, 2014, 2016],
        "season": ["winter", "summer", "winter", "summer", "winter", "summer", "winter", "summer", "winter", "summer"]}

df = pd.DataFrame(data)

df.to_csv("4050_data_cleansing_data/csv1.csv")
#Dies tun csv1.Eine Datei namens csv wird bereinigt_Es wird im Datenverzeichnis erstellt.

Fehlender Wert

Listenweises Löschen / paarweises Löschen

Wenn die gelesenen Daten leer sind, wird dies als fehlender Wert NaN (Not a Number) erkannt. Entfernen fehlender Werte NaN zur Verbesserung der Datengenauigkeit

dropna()Verwenden Sie eine Funktion.
#Erstellen Sie zunächst zufällig eine Tabelle, wobei ein Teil der Tabelle absichtlich fehlt.

import numpy as np
from numpy import nan as NA
import pandas as pd

sample_data_frame = pd.DataFrame(np.random.rand(10, 4))

#Einige Daten gehen absichtlich verloren
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA

sample_data_frame

Listenweise löschen

Löschen der gesamten Zeile oder Spalte (Zeile mit NaN) mit Datenverlust Dies wird als listweises Löschen bezeichnet.

dropna()Verwenden einer Funktion

Entfernen Sie alle Zeilen, die mindestens ein NaN enthalten. Ebenfalls Wenn im Argument Achse = 1 angegeben ist, wird sogar eine Spalte mit NaN entfernt.

sample_data_frame.dropna()

Paarweise löschen

Wenn die listwise-Methode alle fehlenden Zeilen entfernt und zu wenig Daten vorhanden sind Eine andere Möglichkeit besteht darin, nur die verfügbaren Daten zu verwenden. Lassen Sie Spalten mit wenigen Fehlern (z. B. Spalten 0 und 1). Das Löschen von Zeilen, die NaN enthalten, wird als paarweises Löschen bezeichnet.

sample_data_frame[[0, 1]].dropna()

Fehlende Wertvervollständigung

Abgesehen vom Entfernen fehlender Werte, um die Genauigkeit der Daten zu verbessern Sie können fehlenden Werten auch alternative Daten zuweisen.

Ersetzen (Ersetzen) alternativer Daten für den fehlenden Wert NaN

fillna()Verwenden Sie eine Funktion.

Erstellen Sie zufällig eine Tabelle, wobei ein Teil der Tabelle absichtlich fehlt.


import numpy as np
from numpy import nan as NA
import pandas as pd

sample_data_frame = pd.DataFrame(np.random.rand(10, 4))

#Einige Daten gehen absichtlich verloren
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA
# fillna()Bei Verwendung einer Funktion wird die als Argument angegebene Nummer dem NaN-Teil zugewiesen. Dieses Mal werde ich es mit 0 füllen.

sample_data_frame.fillna(0)
#Wenn Sie für die Methode ffill angeben, können Sie sie mit dem Wert der vorherigen Zeile füllen.

sample_data_frame.fillna(method="ffill")

Fehlende Wertvervollständigung (Mittelwertsubstitutionsmethode)

Die Methode zum Ausfüllen der fehlenden Werte mit dem Durchschnittswert der Spalte (oder Zeile) wird als Durchschnittswertsubstitutionsmethode bezeichnet.

Der Durchschnittswert ist Mittelwert()Berechnen Sie mit einer Funktion.
import numpy as np
from numpy import nan as NA
import pandas as pd

sample_data_frame = pd.DataFrame(np.random.rand(10, 4))

#Einige Daten gehen absichtlich verloren
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA

#Ersetzen Sie den NaN-Teil durch den Durchschnittswert der Säule mit fillna
sample_data_frame.fillna(sample_data_frame.mean())

Datenaggregation

Berechnung der Statistik für jeden Schlüssel

Statistiken können in repräsentative Werte und Ausbreitungsgrade unterteilt werden. Ein repräsentativer Wert ist ein Wert, der die grundlegenden Eigenschaften von Daten darstellt. Zum Beispiel Durchschnittswert, Maximalwert, Minimalwert usw.

import pandas as pd

df = pd.read_csv("./4050_data_cleansing_data/wine.csv", header=None)
df.columns=["", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium","Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins","Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]

# DataFrame `df`Schlüssel von"Alcohol"Berechnen Sie den Durchschnittswert von
df["Alcohol"].mean()
#Ausgabeergebnis
13.000617977528091

Daten duplizieren

Wenn es ein Duplikat der Daten gibt, löschen Sie die Daten, um die Genauigkeit der Daten zu verbessern. Bereiten Sie einen DataFrame vor, der tatsächlich doppelte Daten enthält Versuchen Sie, doppelte Daten zu extrahieren oder zu löschen.

import pandas as pd
from pandas import DataFrame

dupli_data = DataFrame({"col1":[1, 1, 2, 3, 4, 4, 6, 6]
                       ,"col2":["a", "b", "b", "b", "c", "c", "b", "b"]})
dupli_data
duplicated()Mit der Methode

Generiert Serientypdaten, die True für doppelte Zeilen zurückgeben und doppelte Daten extrahieren.

#Doppelte Daten extrahieren
dupli_data.duplicated()
#Ausgabeergebnis
0    False
1    False
2    False
3    False
4    False
5     True
6    False
7     True
dtype: bool

dtype steht für "Data Type" und gibt den Datentyp des Elements an.

drop_duplicates()Verwenden Sie die Methode, um doppelte Daten zu entfernen.
dupli_data.drop_duplicates()

Kartierung

Was ist Mapping? Für Daten mit einem gemeinsamen Schlüssel Hierbei wird auf den Wert verwiesen, der dem Schlüssel aus einer anderen Tabelle entspricht. Bereiten Sie tatsächlich einen DataFrame vor und versuchen Sie den Zuordnungsprozess.

import pandas as pd
from pandas import DataFrame

attri_data1 = {"ID": ["100", "101", "102", "103", "104", "106", "108", "110", "111", "113"]
        ,"city": ["Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo", "Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo"]
        ,"birth_year" :[1990, 1989, 1992, 1997, 1982, 1991, 1988, 1990, 1995, 1981]
        ,"name" :["Hiroshi", "Akiko", "Yuki", "Satoru", "Steeve", "Mituru", "Aoi", "Tarou", "Suguru", "Mitsuo"]}
attri_data_frame1 = DataFrame(attri_data1)

attri_data_frame1

Erstellen Sie Daten vom Typ Wörterbuch mit dem Gebietsnamen, der der Stadt entspricht.

city_map ={"Tokyo":"Kanto"
          ,"Hokkaido":"Hokkaido"
          ,"Osaka":"Kansai"
          ,"Kyoto":"Kansai"}
city_map

Verwenden Sie die am Anfang vorbereitete Stadtspalte von attri_data_frame1 als Schlüssel, beziehen Sie sich auf die entsprechenden Bereichsnamensdaten aus city_map und fügen Sie sie der neuen Spalte hinzu. Dies ist der Zuordnungsprozess. Wenn Sie mit Excel vertraut sind, stellen Sie sich einen Prozess wie die vlookup-Funktion vor. Führen Sie die Zuordnungsverarbeitung mit der Funktion map () durch und fügen Sie attri_data_frame1 eine Region als neue Spalte hinzu.

attri_data_frame1["region"] = attri_data_frame1["city"].map(city_map)
attri_data_frame1

Wenn Sie sich die Ausgabe ansehen, sehen Sie, dass der Regionsname zur Regionsspalte hinzugefügt wurde. Elemente, deren entsprechende Daten in city_map nicht vorhanden sind, werden mit NaN gefüllt.

Bin geteilt

Bei der Bin-Aufteilung werden numerische Daten grob in Kategorien unterteilt. Zum Beispiel ist es ein Prozess, das Alter in 0-9 Jahre, 10-19 Jahre, 20-29 Jahre zu unterteilen. Bereiten Sie im Voraus eine Liste mit geteilten Behältern vor

Pandas geschnitten()Mit einer Funktion verarbeiten.
import pandas as pd
from pandas import DataFrame

attri_data1 = {"ID": [100,101,102,103,104,106,108,110,111,113]
        ,"city": ["Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo", "Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo"]
        ,"birth_year" :[1990, 1989, 1992, 1997, 1982, 1991, 1988, 1990, 1995, 1981]
        ,"name" :["Hiroshi", "Akiko", "Yuki", "Satoru", "Steeve", "Mituru", "Aoi", "Tarou", "Suguru", "Mitsuo"]}
attri_data_frame1 = DataFrame(attri_data1)

Geben Sie die Granularität der Division in einer Liste an und führen Sie die Bin-Division durch. Hier konzentrieren wir uns auf geburtstag.

#Erstellen Sie eine Liste mit geteilter Granularität
birth_year_bins = [1980,1985,1990,1995,2000]

#Mach einen Bin Split
birth_year_cut_data = pd.cut(attri_data_frame1.birth_year,birth_year_bins)
birth_year_cut_data
#Ausgabeergebnis
0    (1985, 1990]
1    (1985, 1990]
2    (1990, 1995]
3    (1995, 2000]
4    (1980, 1985]
5    (1990, 1995]
6    (1985, 1990]
7    (1985, 1990]
8    (1990, 1995]
9    (1980, 1985]
Name: birth_year, dtype: category
Categories (4, interval[int64]): [(1980, 1985] < (1985, 1990] < (1990, 1995] < (1995, 2000]]

"()" Enthält diesen Wert nicht und "[]" bedeutet, dass dies der Fall ist. Zum Beispiel umfasst (1985, 1990] nicht 1985, sondern 1990.

Wenn Sie die Nummer jedes Fachs zählen möchten

value_counts()Verwenden Sie die Methode.
pd.value_counts(birth_year_cut_data)
#Ausgabeergebnis
(1985, 1990]    4
(1990, 1995]    3
(1980, 1985]    2
(1995, 2000]    1
Name: birth_year, dtype: int64

Sie können jedem Behälter auch einen Namen geben.

group_names = ["first1980", "second1980", "first1990", "second1990"]
birth_year_cut_data = pd.cut(attri_data_frame1.birth_year,birth_year_bins,labels = group_names)
pd.value_counts(birth_year_cut_data)
#Ausgabeergebnis
second1980    4
first1990     3
first1980     2
second1990    1
Name: birth_year, dtype: int64

Es ist auch möglich, die Anzahl der Teilungen im Voraus und die Teilung festzulegen. Sie können damit Behälter mit ungefähr derselben Größe erstellen. Geben Sie die Anzahl der Unterteilungen im zweiten Argument der Funktion cut () an.

pd.cut(attri_data_frame1.birth_year,2)
#Ausgabeergebnis
0      (1989.0, 1997.0]
1    (1980.984, 1989.0]
2      (1989.0, 1997.0]
3      (1989.0, 1997.0]
4    (1980.984, 1989.0]
5      (1989.0, 1997.0]
6    (1980.984, 1989.0]
7      (1989.0, 1997.0]
8      (1989.0, 1997.0]
9    (1980.984, 1989.0]
Name: birth_year, dtype: category
Categories (2, interval[float64]): [(1980.984, 1989.0] < (1989.0, 1997.0]]

Recommended Posts

Anwendung von Python: Datenbereinigung Teil 2: Datenbereinigung mit DataFrame
Anwendung von Python: Datenbereinigung Teil 1: Python-Notation
Datenbereinigung 2 Datenbereinigung mit DataFrame
Datenanalyse mit Python
Python-Anwendung: Pandas # 3: Dataframe
Mit Python erstellte Beispieldaten
Holen Sie sich Youtube-Daten mit Python
Python-Anwendung: Datenvisualisierung # 2: matplotlib
Webanwendung mit Python + Flask ② ③
Webanwendung mit Python + Flask ④
Lesen von JSON-Daten mit Python
Python-Anwendung: Datenverarbeitung # 3: Datenformat
Überwachen Sie die Leistung von Python-Anwendungen mit Dynatrace ♪
[Python] Mit DataReader Wirtschaftsdaten abrufen
Konvertieren Sie die Liste mit Python in DataFrame
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Python-Datenstruktur mit Chemoinfomatik gelernt
Visualisieren Sie Ihre Daten ganz einfach mit Python Seaborn.
Python-Anwendung: Datenvisualisierung Teil 1: Grundlegend
Verarbeiten Sie Pubmed .xml-Daten mit Python
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Anwendungsentwicklung mit Docker + Python + Flask
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Datenpipeline-Aufbau mit Python und Luigi
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Anwendung von Python: Datenvisualisierung Teil 3: Verschiedene Grafiken
Holen Sie sich Lebensmitteldaten mit Amazon API (Python)
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Generieren Sie japanische Testdaten mit Python faker
Konvertieren Sie Excel-Daten mit Python in JSON
Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Anwendung von Python: Pandas Teil 4: Verketten und Kombinieren von DataFrames
[Python] Webanwendung von 0! Hands-on (4) -Datenformung-
[Python] Eine schnelle Webanwendung mit Bottle!
Empfehlung von Altair! Datenvisualisierung mit Python
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Lassen Sie uns MySQL-Daten mit Python bearbeiten
Organisieren Sie mit Python nach Ordnern getrennte Daten
Führen Sie eine Python-Webanwendung mit Docker aus
Verarbeiten Sie Big Data mit Dataflow (ApacheBeam) + Python3
Statistik mit Python
Python mit Go
Datenanalyse Python
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
[Python] Daten lesen
Mikrocomputer mit Python
Mit Python besetzen
Erstellen Sie solche Testdaten mit Python (Teil 1)
Lesen Sie Daten mit python / netCDF> nc.variables [] / Überprüfen Sie die Datengröße