当前位置: 首页 > 面试题库 >

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

范修伟
2023-03-14
问题内容

从这个问题和其他问题来看,似乎不建议使用concatappend构建熊猫数据框,因为它每次都在重新复制整个数据框。

我的项目涉及每30秒检索少量数据。这可能需要进行为期3天的周末,所以有人可以轻松地期望一次创建超过8000行。将行添加到此数据框的最有效方法是什么?


问题答案:

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

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

有关扩大设置的更多信息

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

In [119]: dfi
Out[119]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4

In [120]: dfi.loc[3] = 5

In [121]: dfi
Out[121]: 
   A  B  C
0  0  1  0
1  2  3  2
2  4  5  4
3  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和“设置放大”的写时复制行为的一个特征是,随着DataFrames的增大,写入速度会越来越慢:

%%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倍的时间。



 类似资料:
  • 问题内容: 从这个问题和其他问题来看,似乎不建议使用或构建熊猫数据框,因为它每次都在重新复制整个数据框。 我的项目涉及每30秒检索少量数据。这可能需要进行为期3天的周末,所以有人可以轻松地期望一次创建超过8000行。将行添加到此数据框的最有效方法是什么? 问题答案: 由于它完全被误认为是在此处编辑所选答案。以下内容说明了为什么不 应该 使用放大设置。 “放大设置”实际上比追加效果差。 该 TL;博

  • 我正在使用Pandas,希望将行添加到已建立列的空数据框中。 到目前为止,我的代码看起来像这样。。。 然而,当我跑步的时候。。。 数据框返回时没有行,只有列。我不确定我做错了什么,但我很确定它与append方法有关。有人知道我做错了什么吗?

  • 问题内容: 如果我有一个空的数据框: 有没有一种方法可以向此新创建的数据框添加新行?目前,我必须创建一个字典,将其填充,然后将字典附加到最后的数据框中。有没有更直接的方法? 问题答案: 即将发布的pandas 0.13版本将允许通过不存在的索引数据添加行。但是,请注意,这实际上会创建整个DataFrame的副本,因此这不是有效的操作。 说明在此处,此新功能称为“ 放大设置” 。

  • 问题内容: 我有一个数据框看起来像这样: 对于YEAR值,我想在原始数据帧中添加year列(1993,1994 …,2009)。如果YEAR中的值为1992,则1992列中的值应为1,否则为0。 我使用了一个非常愚蠢的for循环,但是由于我拥有大量数据集,它似乎可以永远运行。谁能帮助我,非常感谢! 问题答案: 如果您想删除该列,则可以通过进行后续操作。或者,在调用之前从中删除列:

  • 假设我有一个空的dataframe,已经设置了列,但没有行。我从网上搜集了一些数据,所以假设我需要向空数据帧添加一个索引< code>'2176'。当我试图分配该行时,如何自动将它添加到数据库中?这是熊猫的目的还是我应该用别的东西?

  • 本文向大家介绍Python pandas如何向excel添加数据,包括了Python pandas如何向excel添加数据的使用技巧和注意事项,需要的朋友参考一下 pandas读取、写入csv数据非常方便,但是有时希望通过excel画个简单的图表看一下数据质量、变化趋势并保存,这时候csv格式的数据就略显不便,因此尝试直接将数据写入excel文件。 pandas可以写入一个或者工作簿,两种方法介绍