Python-向数据框添加行的有效方法

Python-向数据框添加行的有效方法,第1张

Python-向数据框添加行的有效方法

由于它完全被误认为是在此处编辑所选答案。以下内容说明了为什么不 应该 使用放大设置“放大设置”实际上比追加效果差。

TL;博士 在这里是 有一个数据帧要做到这一点没有有效的方法,所以如果你需要的速度,你应该使用另一种数据结构来代替。
查看其他答案以获得更好的解决方案。

有关扩大设置的更多信息

您可以使用

loc
不存在的索引就地向Dataframe添加行,但是这也会执行所有数据的副本(请参见本讨论)。从Pandas文档中可以看到以下内容:

In [119]: dfiOut[119]:    A  B  C0  0  1  01  2  3  22  4  5  4In [120]: dfi.loc[3] = 5In [121]: dfiOut[121]:    A  B  C0  0  1  01  2  3  22  4  5  43  5  5  5

对于类似上述用例的情况, 设置放大实际上比

append
以下 时间长50%

使用

append()
,8000行耗时6.59s(每行0.8ms)

%%timeit df = pd.Dataframe(columns=["A", "B", "C"]); new_row = pd.Series({"A": 4, "B": 4, "C": 4})for i in range(8000):    df = df.append(new_row, ignore_index=True)# 6.59 s ± 53.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

使用

.loc()
,8000行耗时10s(每行1.25ms)

%%timeit df = pd.Dataframe(columns=["A", "B", "C"]); new_row = pd.Series({"A": 4, "B": 4, "C": 4})for i in range(8000):    df.loc[i] = new_row# 10.2 s ± 148 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
更长的Dataframe呢?

与所有面向数据的代码中的概要分析一样,YMMV也应针对您的用例进行测试。

append
和“设置放大”的写时复制行为的一个特征是,随着
Dataframe
s的增大,写入速度会越来越慢:

%%timeit df = pd.Dataframe(columns=["A", "B", "C"]); new_row = pd.Series({"A": 4, "B": 4, "C": 4})for i in range(16000):    df.loc[i] = new_row# 23.7 s ± 286 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Dataframe
用这种方法建立一个16k的行比8k的行花费2.3倍的时间。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存