Maison >développement back-end >Tutoriel Python >Pourquoi le remplissage d'un Pandas DataFrame ligne par ligne est-il inefficace et quelle est la meilleure approche ?

Pourquoi le remplissage d'un Pandas DataFrame ligne par ligne est-il inefficace et quelle est la meilleure approche ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 10:14:11740parcourir

Why is Populating a Pandas DataFrame Row-by-Row Inefficient, and What's a Better Approach?

Créer et remplir un DataFrame Pandas vide

Conceptuellement, on peut vouloir commencer par créer un DataFrame vide, puis le remplir progressivement avec des valeurs . Cependant, cette approche est inefficace et susceptible de provoquer des problèmes de performances.

Les pièges de la croissance d'un DataFrame par ligne

L'ajout itératif de lignes à un DataFrame vide est coûteux en termes de calcul. . Cela conduit à des opérations de complexité quadratique en raison de l’allocation dynamique de mémoire et de la réaffectation requise. Cela peut avoir un impact important sur les performances, en particulier lorsqu'il s'agit de grands ensembles de données.

Une approche alternative : accumuler des données dans une liste

Au lieu de développer un DataFrame par ligne, il est Il est recommandé d'accumuler les données dans une liste. Cela présente plusieurs avantages :

  • C'est plus efficace et nettement plus rapide.
  • Les listes ont une empreinte mémoire plus petite par rapport aux DataFrames.
  • Les types de données sont automatiquement déduits, éliminant le besoin d'ajustements manuels.
  • Les listes prennent en charge les opérations d'ajout sans altérer la mémoire allocation.

Création d'un DataFrame à partir d'une liste

Une fois les données accumulées dans une liste, un DataFrame peut être facilement créé en convertissant la liste à l'aide de pd .DataFrame(). Cela garantit une inférence appropriée du type de données et automatise la définition d'un RangeIndex pour le DataFrame.

Exemple

Considérez le scénario décrit dans la question. Le code suivant montre comment accumuler des données dans une liste, puis créer un DataFrame :

import pandas as pd

data = []
dates = [pd.to_datetime(f"2023-08-{day}") for day in range(10, 0, -1)]

valdict = {'A': [], 'B': [], 'C': []}  # Initialize symbol value lists

for date in dates:
    for symbol in valdict:
        if date == dates[0]:
            valdict[symbol].append(0)
        else:
            valdict[symbol].append(1 + valdict[symbol][-1])

# Create a DataFrame from the accumulated data
df = pd.DataFrame(valdict, index=dates)

Cette approche garantit une accumulation efficace des données et une création transparente de DataFrame sans aucune surcharge de performances ni soucis concernant les colonnes d'objets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn