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

标签 python pandas numpy dataframe

从此question和其他人似乎不建议使用 concatappend 来构建 Pandas 数据框,因为它每次都在重新复制整个数据框。

我的项目涉及每 30 秒检索一次少量数据。这可能会持续 3 天的周末,因此有人可以很容易地期望一次创建超过 8000 行。向此数据框添加行的最有效方法是什么?

最佳答案

我使用了这个答案的 df.loc[i] = [new_data] 建议,但我有 > 500,000 行,这非常慢。

虽然给出的答案对 OP 的问题有好处,但我发现在预先处理大量行时(而不是 OP 描述的欺骗)使用 csvwriter 将数据添加到内存中更有效CSV 对象,然后最后使用 pandas.read_csv(csv) 生成所需的 DataFrame 输出。

from io import BytesIO
from csv import writer 
import pandas as pd

output = BytesIO()
csv_writer = writer(output)

for row in iterable_object:
    csv_writer.writerow(row)

output.seek(0) # we need to get back to the start of the BytesIO
df = pd.read_csv(output)
return df

这对于大约 500,000 行来说,速度提高了 1000 倍,并且随着行数的增加,速度提升只会越来越大(df.loc[1] = [data] 相对而言会慢很多)

希望这有助于在处理比 OP 更多的行时需要效率的人。

关于Python - 向数据框添加行的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888080/

相关文章:

python - 在函数中使用空元组作为默认的可迭代参数

python - 根据存在的条件从数据框中选择列

python - 删除数据框中每个 ID 的前 n 行

python - 索引包含开区间的 Pandas 数据帧

python - numpy - 使用数组作为范围的开始和结束

python追加2d列表不能按预期工作,这是一个错误吗?

python - 使用一个命令运行多个 Django 应用程序测试

python - 如何使用 pytest 测试交互式 python 应用程序

python - 当 inf 存在时, np.percentile 返回与 np.median 不同的中位数

python - 如何将常规 numpy 数组转换为记录数组?