Standardansätze, wie die Verwendung von pandas.read_csv(), greifen bei der Verarbeitung großer CSV-Dateien oft zu kurz. Diese Methoden sind Single-Threaded und können aufgrund von Festplatten-I/O oder Speicherbeschränkungen schnell zu Engpässen führen.
Der ultimative Python-Programmierer-Übungstest
Durch die Parallelisierung von CSV-Vorgängen können Sie mehrere CPU-Kerne nutzen, um Daten schneller und effizienter zu verarbeiten. In diesem Leitfaden werden Techniken beschrieben, die Folgendes verwenden:
Das Aufteilen einer großen CSV-Datei in kleinere Teile ermöglicht eine parallele Verarbeitung. Hier ist ein Beispielskript:
import os def split_csv(file_path, lines_per_chunk=1000000): with open(file_path, 'r') as file: header = file.readline() file_count = 0 output_file = None for i, line in enumerate(file): if i % lines_per_chunk == 0: if output_file: output_file.close() file_count += 1 output_file = open(f'chunk_{file_count}.csv', 'w') output_file.write(header) output_file.write(line) if output_file: output_file.close() print(f"Split into {file_count} files.")
Dask ist ein Game-Changer für den Umgang mit großen Datenmengen in Python. Es kann Vorgänge an großen Datensätzen mühelos parallelisieren:
import dask.dataframe as dd # Load the dataset as a Dask DataFrame df = dd.read_csv('large_file.csv') # Perform parallel operations result = df[df['column_name'] > 100].groupby('another_column').mean() # Save the result result.to_csv('output_*.csv', single_file=True)
Dask bewältigt Speicherbeschränkungen, indem es Datenblöcke verarbeitet und Aufgaben intelligent über die verfügbaren Kerne hinweg plant.
Der ultimative Python-Programmierer-Übungstest
Polars ist eine relativ neue Bibliothek, die die Geschwindigkeit von Rust mit der Flexibilität von Python kombiniert. Es ist für moderne Hardware konzipiert und kann CSV-Dateien deutlich schneller verarbeiten als Pandas:
import polars as pl # Read CSV using Polars df = pl.read_csv('large_file.csv') # Filter and aggregate data filtered_df = df.filter(pl.col('column_name') > 100).groupby('another_column').mean() # Write to CSV filtered_df.write_csv('output.csv')
Polars zeichnet sich in Situationen aus, in denen Geschwindigkeit und Parallelität entscheidend sind. Es ist besonders effektiv für Systeme mit mehreren Kernen.
Wenn Sie lieber die Kontrolle über die Verarbeitungslogik behalten möchten, bietet das Multiprocessing-Modul von Python eine einfache Möglichkeit, CSV-Vorgänge zu parallelisieren:
from multiprocessing import Pool import pandas as pd def process_chunk(file_path): df = pd.read_csv(file_path) # Perform operations filtered_df = df[df['column_name'] > 100] return filtered_df if __name__ == '__main__': chunk_files = [f'chunk_{i}.csv' for i in range(1, 6)] with Pool(processes=4) as pool: results = pool.map(process_chunk, chunk_files) # Combine results combined_df = pd.concat(results) combined_df.to_csv('final_output.csv', index=False)
Festplatten-E/A vs. CPU-gebunden
Stellen Sie sicher, dass Ihre Parallelstrategie die CPU-Verarbeitung mit den Lese-/Schreibgeschwindigkeiten der Festplatte in Einklang bringt. Optimieren Sie basierend darauf, ob Ihr Engpass E/A oder Berechnungen betrifft.
Speicheraufwand
Tools wie Dask oder Polars sind im Vergleich zur manuellen Mehrfachverarbeitung speichereffizienter. Wählen Sie Tools, die den Speicherbeschränkungen Ihres Systems entsprechen.
Fehlerbehandlung
Die parallele Verarbeitung kann zu einer Komplexität beim Debuggen und Fehlermanagement führen. Implementieren Sie eine robuste Protokollierung und Ausnahmebehandlung, um die Zuverlässigkeit sicherzustellen.
Der ultimative Python-Programmierer-Übungstest
Das obige ist der detaillierte Inhalt vonOptimierung der Datenverarbeitung im großen Maßstab in Python: Ein Leitfaden zur Parallelisierung von CSV-Vorgängen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!