Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah Mengisi Bingkai Data Pandas Baris-demi-Baris Tidak Cekap, dan Apakah Pendekatan yang Lebih Baik?

Mengapakah Mengisi Bingkai Data Pandas Baris-demi-Baris Tidak Cekap, dan Apakah Pendekatan yang Lebih Baik?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-30 10:14:11823semak imbas

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

Mencipta dan Mengisi DataFrame Panda Kosong

Secara konsep, seseorang mungkin mahu bermula dengan mencipta DataFrame kosong dan kemudian mengisinya secara berperingkat dengan nilai . Walau bagaimanapun, pendekatan ini tidak cekap dan terdedah kepada masalah prestasi.

Kesalahan Membangunkan DataFrame Dari segi Barisan

Menambahkan baris secara berulang pada DataFrame kosong adalah mahal dari segi pengiraan . Ia membawa kepada operasi kerumitan kuadratik disebabkan oleh peruntukan memori dinamik dan penugasan semula yang diperlukan. Ini boleh menjejaskan prestasi dengan teruk, terutamanya apabila berurusan dengan set data yang besar.

Pendekatan Alternatif: Mengumpul Data dalam Senarai

Daripada mengembangkan DataFrame mengikut baris, ia lebih baik disyorkan untuk mengumpul data dalam senarai. Ini mempunyai beberapa kelebihan:

  • Ia lebih cekap dan jauh lebih pantas.
  • Senarai mempunyai jejak memori yang lebih kecil berbanding DataFrames.
  • Jenis data disimpulkan secara automatik, menghapuskan keperluan untuk pelarasan manual.
  • Senarai menyokong operasi penambahan tanpa mengubah memori peruntukan.

Membuat DataFrame daripada Senarai

Apabila data telah terkumpul dalam senarai, DataFrame boleh dibuat dengan mudah dengan menukar senarai menggunakan pd .DataFrame(). Ini memastikan inferens jenis data yang betul dan mengautomasikan menetapkan RangeIndex untuk DataFrame.

Contoh

Pertimbangkan senario yang diterangkan dalam soalan. Kod berikut menunjukkan cara untuk mengumpul data dalam senarai dan kemudian mencipta 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)

Pendekatan ini memastikan pengumpulan data yang cekap dan penciptaan DataFrame yang lancar tanpa sebarang overhed prestasi atau kebimbangan tentang lajur objek.

Atas ialah kandungan terperinci Mengapakah Mengisi Bingkai Data Pandas Baris-demi-Baris Tidak Cekap, dan Apakah Pendekatan yang Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn