Python
Mühelos Dict in DataFrame umwandeln: Ein Anfängerleitfaden

Mühelos Dict in DataFrame umwandeln: Ein Anfängerleitfaden

MoeNagy Dev

Warum ein Dictionary in einen DataFrame umwandeln?

Dictionaries sind eine grundlegende Datenstruktur in Python und bieten eine flexible und effiziente Möglichkeit, Schlüssel-Wert-Paare zu speichern und abzurufen. Wenn jedoch Ihre Daten komplexer werden, kann die Arbeit mit Dictionaries umständlich werden, insbesondere wenn Sie fortgeschrittene Datenanalyse oder -manipulation durchführen müssen. Hier kommen Pandas DataFrames ins Spiel.

Vorteile der Verwendung eines DataFrames gegenüber einem Dictionary

  1. Tabellarische Datenstruktur: Pandas DataFrames bieten eine tabellarische Datenstruktur, die die Arbeit mit Daten erleichtert, die eine definierte Struktur wie Zeilen und Spalten aufweisen. Diese Struktur erleichtert Operationen wie Filtern, Sortieren und Gruppieren, die für die Datenanalyse unerlässlich sind.

  2. Leistungsstarke Datenanalysetools: Pandas DataFrames bieten eine Vielzahl von Datenanalysetools und -funktionen, wie z.B. integrierte Unterstützung für den Umgang mit fehlenden Daten, die Anwendung mathematischer Operationen und die Durchführung fortgeschrittener statistischer Analysen.

  3. Effiziente Speicherauslastung: Pandas DataFrames sind optimiert für die Speicherauslastung, insbesondere bei der Arbeit mit großen Datensätzen. Sie können Daten effizienter verarbeiten als eine Sammlung von Dictionaries.

  4. Interoperabilität mit anderen Bibliotheken: DataFrames lassen sich gut mit anderen beliebten Python-Datenwissenschaftsbibliotheken wie NumPy, Matplotlib und Scikit-learn integrieren, so dass Sie Ihre Daten nahtlos in eine breitere Palette von Datenverarbeitungs- und Visualisierungs-Workflows integrieren können.

Szenarien, in denen diese Konvertierung nützlich ist

  • Datenbereinigung und Vorverarbeitung: Bei der Arbeit mit Daten aus verschiedenen Quellen ist es häufig üblich, die Daten in Form von Dictionaries zu erhalten. Die Konvertierung dieser Dictionaries in DataFrames vereinfacht die Schritte zur Datenbereinigung und Vorverarbeitung.

  • Datenanalyse und Visualisierung: DataFrames bieten ein strukturiertes Format, das sich gut für die Datenanalyse eignet und es Ihnen ermöglicht, eine Vielzahl von analytischen Techniken anzuwenden und aussagekräftige Visualisierungen zu erstellen.

  • Maschinelles Lernen und Modellierung: Viele Maschinenlernbibliotheken, wie z.B. Scikit-learn, erwarten Daten in einem tabellarischen Format, so dass die Konvertierung von Dictionaries in DataFrames ein entscheidender Schritt im Modellentwicklungsprozess ist.

  • Datenmanipulation und Transformation: DataFrames bieten eine Vielzahl von Funktionen und Methoden zur Manipulation von Daten, einschließlich Filtern, Sortieren, Gruppieren und Durchführen von Berechnungen, die mit einer Sammlung von Dictionaries oft schwieriger umzusetzen sind.

Erstellen eines Dictionarys

Beginnen wir mit der Definition eines einfachen Dictionarys:

person = {
    "name": "John Doe",
    "age": 35,
    "city": "New York"
}

Dieses Dictionary hat drei Schlüssel-Wert-Paare, wobei die Schlüssel Zeichenketten und die Werte entweder Zeichenketten oder Ganzzahlen sind.

Umgang mit Dictionaries mit verschachtelten Strukturen

Dictionaries können auch verschachtelte Strukturen haben, bei denen die Werte andere Dictionaries oder Listen sein können. Hier ist ein Beispiel:

person = {
    "name": "John Doe",
    "age": 35,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    },
    "hobbies": ["reading", "hiking", "photography"]
}

In diesem Beispiel hat der Schlüssel "address" ein Dictionary als Wert und der Schlüssel "hobbies" hat eine Liste als Wert.

Konvertieren eines Dictionarys in einen DataFrame

Um ein Dictionary in einen Pandas DataFrame umzuwandeln, können Sie die Funktion pd.DataFrame() verwenden:

import pandas as pd
 
df = pd.DataFrame(person)

Dadurch wird ein DataFrame erstellt, bei dem die Schlüssel des Dictionarys die Spaltennamen und die entsprechenden Werte die Zeilen sind.

Umgang mit Dictionaries mit unterschiedlichen Werttypen

Pandas ist in der Lage, Dictionaries mit unterschiedlichen Datentypen für die Werte zu verarbeiten. Zum Beispiel:

person = {
    "name": "John Doe",
    "age": 35,
    "is_employed": True,
    "salary": 50000.0
}
 
df = pd.DataFrame(person)

In diesem Fall hat der DataFrame Spalten für "name", "age", "is_employed" und "salary", jeweils mit dem entsprechenden Datentyp.

Beibehaltung der Dictionary-Struktur im DataFrame

Wenn Sie ein Dictionary mit verschachtelten Strukturen haben, wie das mit den Schlüsseln "address" und "hobbies", bewahrt Pandas diese Struktur beim Konvertieren in einen DataFrame:

person = {
    "name": "John Doe",
    "age": 35,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    },
    "hobbies": ["reading", "hiking", "photography"]
}
 
df = pd.DataFrame(person)

Der resultierende DataFrame hat die verschachtelten Dictionary- und Listenstrukturen als separate Spalten.

Anpassen des DataFrames

Angeben von Spaltennamen

Sie können die Spaltennamen beim Erstellen des DataFrames angeben, indem Sie eine Liste von Spaltennamen als Argument columns übergeben:

columns = ["full_name", "age", "is_employed", "monthly_salary"]
df = pd.DataFrame(person, columns=columns)

Dadurch wird ein DataFrame mit den angegebenen Spaltennamen erstellt, auch wenn die ursprünglichen Dictionary-Schlüssel nicht übereinstimmen.

Umgang mit fehlenden Werten

Wenn Ihr Dictionary fehlende Werte enthält, behandelt Pandas sie automatisch, indem es NaN (Not a Number)-Werte in den entsprechenden Zellen des DataFrames einfügt:

person = {
    "name": "Jane Doe",
    "age": 28,
    "city": None
}
 
df = pd.DataFrame(person)

Der resultierende DataFrame hat eine "city"-Spalte mit einem NaN-Wert.

Ändern der Datentypen von Spalten

Sie können auch die Datentypen der Spalten beim Erstellen des DataFrames angeben:

person = {
    "name": "John Doe",
"age": "35",
"is_employed": "True"
}
 
df = pd.DataFrame(person, dtype={"age": int, "is_employed": bool})

In diesem Beispiel wird die Spalte "age" in eine Ganzzahl und die Spalte "is_employed" in einen booleschen Wert konvertiert.

Umgang mit Wörterbüchern mit Listen als Werten

Wenn Ihr Wörterbuch Listen als Werte enthält, erstellt Pandas ein DataFrame mit einer Zeile pro Eintrag im Wörterbuch und den Listenelementen als separate Spalten:

person = {
    "name": "John Doe",
    "age": 35,
    "hobbies": ["reading", "hiking", "photography"]
}
 
df = pd.DataFrame(person)

Das resultierende DataFrame hat eine "hobbies"-Spalte mit einer Liste von Werten für jede Zeile.

Gewährleistung gleichbleibender Spaltenlängen

Wenn die Listen in Ihrem Wörterbuch unterschiedliche Längen haben, füllt Pandas automatisch fehlende Werte mit NaN auf:

persons = [
    {"name": "John Doe", "hobbies": ["reading", "hiking"]},
    {"name": "Jane Doe", "hobbies": ["painting", "gardening", "cooking"]}
]
 
df = pd.DataFrame(persons)

Das resultierende DataFrame hat eine "hobbies"-Spalte mit 3 Elementen für jede Zeile, mit NaN-Werten, wo die Liste kürzer war.

Umgang mit ungleichen Listenlängen

Wenn Sie sicherstellen möchten, dass alle Zeilen die gleiche Anzahl von Elementen in den Listenspalten haben, können Sie die Methode explode() verwenden, um die Listen in separate Zeilen "zu sprengen":

persons = [
    {"name": "John Doe", "hobbies": ["reading", "hiking"]},
    {"name": "Jane Doe", "hobbies": ["painting", "gardening", "cooking"]}
]
 
df = pd.DataFrame(persons)
df = df.explode("hobbies")

Dadurch entsteht ein DataFrame mit einer Zeile pro Hobby, wobei die Verbindung zwischen den Namen und ihren Hobbys erhalten bleibt.

Wörterbücher mit verschachtelten Wörterbüchern

Wenn Ihr Wörterbuch verschachtelte Wörterbücher als Werte enthält, behält Pandas diese Struktur im resultierenden DataFrame bei:

person = {
    "name": "John Doe",
    "age": 35,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    }
}
 
df = pd.DataFrame(person)

Das DataFrame hat eine Spalte für das verschachtelte Wörterbuch "address", auf das bei Bedarf weiter zugegriffen und manipuliert werden kann.

Flachlegen der verschachtelten Struktur

Wenn Sie ein "flaches" DataFrame bevorzugen, bei dem die Werte des verschachtelten Wörterbuchs als separate Spalten angezeigt werden, können Sie die Funktion pd.json_normalize() verwenden:

person = {
    "name": "John Doe",
    "age": 35,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    }
}
 
df = pd.json_normalize(person)

Dadurch entsteht ein DataFrame mit Spalten für "name", "age", "address.street", "address.city" und "address.state".

Beibehaltung der hierarchischen Struktur

Alternativ können Sie die hierarchische Struktur des verschachtelten Wörterbuchs beibehalten, indem Sie die Funktion pd.DataFrame() mit dem Parameter orient="index" verwenden:

person = {
    "name": "John Doe",
    "age": 35,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "state": "NY"
    }
}
 
df = pd.DataFrame.from_dict(person, orient="index")

Dadurch entsteht ein DataFrame mit einem hierarchischen Index, bei dem die Schlüssel des verschachtelten Wörterbuchs als mehrstufiger Index dargestellt werden.

Umgang mit doppelten Schlüsseln

Wenn Ihr Wörterbuch doppelte Schlüssel enthält, behandelt Pandas sie je nach Vorlieben auf verschiedene Weise.

Umgang mit Wörterbüchern mit doppelten Schlüsseln

Betrachten Sie das folgende Wörterbuch mit doppelten Schlüsseln:

person = {
    "name": "John Doe",
    "age": 35,
    "city": "New York",
    "city": "Los Angeles"
}

Wenn Sie dieses Wörterbuch in ein DataFrame konvertieren, behält Pandas das letzte Vorkommen des doppelten Schlüssels bei:

df = pd.DataFrame(person)

Das resultierende DataFrame hat eine "city"-Spalte mit dem Wert "Los Angeles".

Behebung von Konflikten mit verschiedenen Strategien

Wenn Sie die doppelten Schlüssel unterschiedlich behandeln möchten, können Sie die Funktion pd.DataFrame() mit dem Parameter duplicates verwenden:

person = {
    "name": "John Doe",
    "age": 35,
    "city": "New York",
    "city": "Los Angeles"
}
 
df = pd.DataFrame([person], duplicates="keep_first")

Dadurch wird das erste Vorkommen des doppelten Schlüssels beibehalten und es entsteht ein DataFrame mit "city" setzt auf "New York".

Alternativ können Sie "keep_last" verwenden, um das letzte Vorkommen beizubehalten, oder "raise", um einen Fehler zu melden, wenn doppelte Schlüssel auftreten.

Beibehaltung der ursprünglichen Wörterbuchstruktur

Wenn Sie die ursprüngliche Wörterbuchstruktur beibehalten möchten, einschließlich der doppelten Schlüssel, können Sie die Funktion pd.DataFrame() mit dem Parameter orient="index" verwenden:

person = {
    "name": "John Doe",
    "age": 35,
    "city": "New York",
    "city": "Los Angeles"
}
 
df = pd.DataFrame.from_dict(person, orient="index")

Dadurch entsteht ein DataFrame mit einem mehrstufigen Index, bei dem die doppelten Schlüssel als separate Zeilen repräsentiert werden.

Kombinieren mehrerer Wörterbücher

Oft müssen Sie mit mehreren Wörterbüchern arbeiten und sie zu einem einzigen DataFrame kombinieren.

Zusammenführen von Wörterbüchern in einem einzigen DataFrame

Sie können die Funktion pd.DataFrame() verwenden, um ein DataFrame aus einer Liste von Wörterbüchern zu erstellen:

persons = [
    {"name": "John Doe", "age": 35, "city": "New York"},
    {"name": "Jane Doe", "age": 28, "city": "Los Angeles"},
    {"name": "Bob Smith", "age": 42, "city": "Chicago"}
]
 
df = pd.DataFrame(persons)

Dadurch entsteht ein DataFrame mit Spalten für "name", "age" und "city".

Umgang mit Wörterbüchern mit überlappenden Schlüsseln

Wenn die Wörterbücher überlappende Schlüssel haben, behandelt Pandas den Konflikt basierend auf der Reihenfolge der Wörterbücher in der Liste:

persons = [
    {"name": "John Doe", "age": 35, "city": "New York"},
    {"name": "Jane Doe", "age": 28, "city": "Los Angeles"

Bedingte Anweisungen

Bedingte Anweisungen in Python ermöglichen es Ihnen, verschiedene Codeblöcke basierend auf bestimmten Bedingungen auszuführen. Die häufigste bedingte Anweisung ist die `if-elif-else`-Anweisung.

```python
age = 25
if age < 18:
    print("Du bist minderjährig.")
elif age >= 18 and age < 65:
    print("Du bist erwachsen.")
else:
    print("Du bist Senior.")

In diesem Beispiel überprüft das Programm das Alter und gibt die entsprechende Nachricht basierend auf der Bedingung aus.

Schleifen

Schleifen in Python ermöglichen es Ihnen, einen Codeblock wiederholt auszuführen. Die beiden häufigsten Arten von Schleifen sind for-Schleifen und while-Schleifen.

For-Schleifen

for-Schleifen werden verwendet, um über eine Sequenz zu iterieren, wie z. B. eine Liste, ein Tupel oder einen String.

fruits = ["Apfel", "Banane", "Kirsche"]
for fruit in fruits:
    print(fruit)

Dies gibt aus:

Apfel
Banane
Kirsche

While-Schleifen

while-Schleifen werden verwendet, um einen Codeblock auszuführen, solange eine bestimmte Bedingung wahr ist.

count = 0
while count < 5:
    print(count)
    count += 1

Dies gibt aus:

0
1
2
3
4

Funktionen

Funktionen in Python sind Blöcke von wiederverwendbarem Code, die eine bestimmte Aufgabe erfüllen. Sie können Argumente entgegennehmen und Werte zurückgeben.

def greet(name):
    print(f"Hallo, {name}!")
 
greet("Alice")

Dies gibt aus:

Hallo, Alice!

Sie können auch Funktionen mit Standardargumenten und variablen Argumenten definieren.

def calculate_area(length, width, height=None):
    if height is None:
        return length * width
    else:
        return length * width * height
 
print(calculate_area(5, 10))       # Ausgabe: 50
print(calculate_area(2, 3, 4))     # Ausgabe: 24

Module und Pakete

Die eingebauten Module von Python bieten einen großen Funktionsumfang, und Sie können auch eigene Module und Pakete erstellen.

import math
print(math.pi)  # Ausgabe: 3.141592653589793

Sie können auch bestimmte Funktionen oder Attribute aus einem Modul importieren.

from math import sqrt
print(sqrt(16))  # Ausgabe: 4.0

Pakete sind Sammlungen von Modulen, die in Verzeichnissen organisiert sind.

my_package/
    __init__.py
    module1.py
    module2.py

Sie können Module aus einem Paket mit der Punkt-Notation importieren.

import my_package.module1
my_package.module1.my_function()

Datei-E/A

Python bietet eingebaute Funktionen zum Lesen aus und Schreiben in Dateien.

# Schreiben in eine Datei
with open("beispiel.txt", "w") as file:
    file.write("Hallo, Welt!")
 
# Lesen aus einer Datei
with open("beispiel.txt", "r") as file:
    inhalt = file.read()
    print(inhalt)  # Ausgabe: Hallo, Welt!

Die with-Anweisung stellt sicher, dass die Datei nach Abschluss der Operationen ordnungsgemäß geschlossen wird.

Fehlerbehandlung

Die Fehlerbehandlung von Python ermöglicht es Ihnen, Fehler und unerwartete Situationen in Ihrem Code zu behandeln.

try:
    ergebnis = 10 / 0
except ZeroDivisionError:
    print("Fehler: Division durch Null")
else:
    print(f"Ergebnis: {ergebnis}")
finally:
    print("Dieser Block wird immer ausgeführt.")

Dies gibt aus:

Fehler: Division durch Null
Dieser Block wird immer ausgeführt.

Objektorientierte Programmierung (OOP)

Python unterstützt die objektorientierte Programmierung, mit der Sie benutzerdefinierte Klassen und Objekte erstellen können.

class Hund:
    def __init__(self, name, rasse):
        self.name = name
        self.rasse = rasse
 
    def bellen(self):
        print("Wuff!")
 
mein_hund = Hund("Buddy", "Labrador")
print(mein_hund.name)  # Ausgabe: Buddy
mein_hund.bellen()     # Ausgabe: Wuff!

In diesem Beispiel definieren wir eine Hund-Klasse mit einer __init__-Methode, um die Attribute des Objekts zu initialisieren, und einer bellen-Methode, um den Hund bellen zu lassen.

Fazit

In diesem Tutorial haben wir eine Vielzahl von Python-Konzepten behandelt, darunter bedingte Anweisungen, Schleifen, Funktionen, Module und Pakete, Datei-E/A, Fehlerbehandlung und objektorientierte Programmierung. Dies sind wesentliche Bausteine für die Erstellung leistungsstarker und vielseitiger Python-Anwendungen. Wenn Sie weiterhin Python lernen und erkunden, denken Sie daran, regelmäßig zu üben, verschiedene Techniken auszuprobieren und Ressourcen zu verwenden, um Ihr Verständnis zu vertiefen. Viel Spaß beim Programmieren!

MoeNagy Dev