首页 >后端开发 >Python教程 >为什么逐行填充 Pandas DataFrame 效率低下,什么是更好的方法?

为什么逐行填充 Pandas DataFrame 效率低下,什么是更好的方法?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-30 10:14:11740浏览

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

创建并填充一个空的 Pandas DataFrame

从概念上讲,人们可能希望首先创建一个空的 DataFrame,然后逐步用值填充它。然而,这种方法效率低下,并且容易导致性能问题。

按行增长 DataFrame 的陷阱

迭代地将行追加到空 DataFrame 的计算成本很高。由于需要动态内存分配和重新分配,它会导致二次复杂度操作。这可能会严重影响性能,尤其是在处理大型数据集时。

另一种方法:在列表中累积数据

它不是按行增长 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn