您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

由于它完全被误认为是在此处编辑所选答案。以下内容说明了为什么不 应该 使用放大设置。

在这里是 查看其他答案以获得更好的解决方案。

您可以使用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(),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)

与所有面向数据的代码中的概要分析一样,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倍的时间。

python 2022/1/1 18:40:20 有406人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶