创建一个空的 Pandas DataFrame,然后填充它
迭代地用值填充 DataFrame
使用给定的 DataFrame 文档,您想要迭代用时间序列类型计算中的值填充 DataFrame。目标是使用 A 列、B 列和时间戳行(全部为 0 或全部为 NaN)来初始化 DataFrame。然后,您想要添加初始值并检查此数据,根据之前的行计算新行,例如 row[A][t] = row[A][t-1] 1 左右。
虽然当前使用迭代器、scipy 的零函数和日期时间的代码可能有效,但它可以改进。
为什么不增长 DataFrame按行?
通常不建议按行增长 DataFrame,原因如下:
-
计算成本: 追加到列表并创建与创建一个空 DataFrame 并一遍又一遍地附加到它相比,一次性 DataFrame 的计算强度较小再次。
-
内存使用:列表占用的内存更少,并且是比 DataFrame 更轻的数据结构,使它们的追加和删除效率更高。
-
数据类型推断:如果追加到 DataFrame,最终可能会得到对象列,这会影响 pandas 的性能。另一方面,列表允许自动推断数据类型。
-
索引管理:当您从列表创建 DataFrame 时,会自动为您的数据创建 RangeIndex,这可以节省您的时间。自己管理索引的麻烦。
推荐的方法:将数据累积在list
与其按行增长 DataFrame,不如将数据累积在列表中,然后使用 pd.DataFrame(data) 初始化 DataFrame。这种方法具有以下优点:
-
效率:计算效率更高,需要更少的内存。
-
灵活性:列表可以转换为 list-of-lists 和 list-of-dicts 格式,这些格式都被pd.DataFrame.
-
方便:它自动处理索引管理和数据类型推断。
要考虑的替代方案
在累积数据时列表是首选方法,有两种更糟糕的选择需要避免:
-
在循环内追加或连接:这是低效且容易出错的,因为它会重复重新分配内存并可能导致对象列。
-
创建一个空的NaNs 的 DataFrame: 这种方法也会创建对象列并需要手动索引
结论
要有效地用值填充 DataFrame,最好将数据累积在列表中,然后使用 pd.DataFrame(data) 初始化 DataFrame。这种方法高效、灵活且方便,使其成为使用 pandas DataFrame 的首选方法。
以上是如何高效地迭代填充 Pandas DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!