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
Lepaskan: 2024-11-30 10:14:11
asal
739 orang telah melayarinya

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan