将行附加到 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/2801pandas
目前不支持此功能。我也不确定这是否值得。您是否有特定的用例?
这里有一个相关问题:***.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 而不制作新副本的主要内容,如果未能解决你的问题,请参考以下文章
将字符串拆分附加到 Pandas DataFrame [关闭]
将dict动态附加到空的Pandas.Dataframe中[重复]