将行附加到 pandas DataFrame 而不制作新副本

Posted

技术标签:

【中文标题】将行附加到 pandas DataFrame 而不制作新副本【英文标题】:Append rows to a pandas DataFrame without making a new copy 【发布时间】:2013-08-14 07:59:09 【问题描述】:

熊猫documentation 包含一个注释:

注意 与 list.append 方法不同,它追加到原始列表并且不返回任何内容,此处的 append 不会修改 df1 并返回附加了 df2 的副本。

如何在不复制的情况下附加到现有的 DataFrame?或者按照注释的条款,如何通过附加 df2 来修改 df1 并且不返回任何内容?

【问题讨论】:

看起来通过就地修改实际上并没有提高性能:github.com/pydata/pandas/issues/2801 pandas 目前不支持此功能。我也不确定这是否值得。您是否有特定的用例? 这里有一个相关问题:***.com/questions/16740887/…。您在这里的最终目标是什么? 我正在从外部源读取许多大型数据文件并逐个构建 DataFrame,然后我可以一次将其全部写入数据库。 DataFrame 会变得非常大(很多 GB),我想避免每次添加新数据时都复制一份。 【参考方案1】:

为什么不使用 concat?

df = pd.concat([df, pd.DataFrame(new_data)])

【讨论】:

如果我理解正确,那会复制 df 并重新分配它,如果 df 很大,我想避免这种情况。【参考方案2】:

见How to add an extra row to a pandas dataframe

即将推出的 pandas 0.13 版本将允许通过 loc 在不存在的索引数据上添加行。

描述是here,这个新功能被称为设置放大

【讨论】:

Setting With Enlargement 的解决方案仅适用于 1 行。问题是“追加行s ...” 另外,引用linked answer:“但是,请注意,在后台,这会创建整个 DataFrame 的副本,因此它不是一个有效的操作。” 是的,与df.loc[some_index from a loop counter] = a row of a df (= a Series)df.loc[some indices from a range] = df2.values 合作,请参阅Python pandas insert empty rows after each row 的后一个示例。

以上是关于将行附加到 pandas DataFrame 而不制作新副本的主要内容,如果未能解决你的问题,请参考以下文章

python Pandas - 将行附加到数据帧

将字符串拆分附加到 Pandas DataFrame [关闭]

将dict动态附加到空的Pandas.Dataframe中[重复]

将 pandas DataFrame 列附加到 CSV

将列表或系列作为一行附加到 pandas DataFrame?

将多个字典附加到 Pandas 数据框:错误 DataFrame 构造函数未正确调用?