ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame に行ごとにデータを入力するのが非効率である理由と、より良いアプローチは何ですか?

Pandas DataFrame に行ごとにデータを入力するのが非効率である理由と、より良いアプローチは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 10:14:11821ブラウズ

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

空の Pandas DataFrame の作成と設定

概念的には、空の DataFrame を作成してから、段階的に値を入力することをお勧めします。 。ただし、このアプローチは非効率的であり、パフォーマンスの問題を引き起こす傾向があります。

DataFrame を行ごとに拡張する際の落とし穴

空の DataFrame に繰り返し行を追加すると、計算コストが高くなります。 。動的なメモリ割り当てと再割り当てが必要となるため、2次複雑度の演算が必要になります。これは、特に大規模なデータセットを扱う場合、パフォーマンスに重大な影響を与える可能性があります。

代替アプローチ: リスト内にデータを蓄積する

DataFrame を行単位で拡張する代わりに、データをリストに蓄積することをお勧めします。これにはいくつかの利点があります。

  • より効率的で大幅に高速です。
  • リストは DataFrame に比べてメモリ使用量が小さくなります。
  • データ型は自動的に推論されます。手動調整の必要がなくなります。
  • リストは、メモリを変更せずに追加操作をサポートします。

リストからの DataFrame の作成

リストにデータが溜まったら、pd を使ってリストを変換することで簡単に DataFrame を作成できます.DataFrame()。これにより、適切なデータ型推論が保証され、DataFrame の RangeIndex の設定が自動化されます。

質問で説明されているシナリオを考えてみましょう。次のコードは、リストにデータを蓄積して 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)

このアプローチにより、パフォーマンスのオーバーヘッドやオブジェクト列に関する懸念を持たずに、効率的なデータの蓄積とシームレスな DataFrame の作成が保証されます。

以上がPandas DataFrame に行ごとにデータを入力するのが非効率である理由と、より良いアプローチは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。