【问题标题】:Efficient way to add many rows to a DataFrame向 DataFrame 添加多行的有效方法
【发布时间】:2019-06-01 00:23:20
【问题描述】:

我真的很想加快我的代码速度。

我已经在工作的代码循环通过 DataFrame 并获取开始和结束年份。然后我将它添加到列表中。在循环结束时,我追加到空 DataFrame。

rows = range(3560)

#initiate lists and dataframe
start_year = []
end_year = []

for i in rows:

    start_year.append(i)
    end_year.append(i)


df = pd.DataFrame({'Start date':start_year, 'End date':end_year})

我得到了我的期望,但非常缓慢:

    Start date  End date
0   1            1
1   2            2
2   3            3
3   4            4

【问题讨论】:

  • 不需要实例化你的df。另外,这里的缩进准确吗?
  • 其实我根本不懂df.append
  • rows = range(len(disaster_data)) 这意味着rows 只是一个整数。我认为此示例与您的实际代码不相似,或者存在严重问题。
  • 根据您的评论更新了代码。仍然想知道,如何让它更快

标签: python pandas performance append


【解决方案1】:

是的,它可以做得更快。诀窍是在循环中避免list.append(或者更糟糕的pd.DataFrame.append)。您可以使用list(range(3560)),但您可能会发现np.arange 更有效率。在这里您可以通过dict.fromkeys 将一个数组分配给多个系列:

df = pd.DataFrame(dict.fromkeys(['Start date', 'End date'], np.arange(3560)))

print(df.shape)
# (3560, 2)

print(df.head())
#    Start date  End date
# 0           0         0
# 1           1         1
# 2           2         2
# 3           3         3
# 4           4         4

【讨论】:

  • 我专门询问了 cmets 中的缩进,以表达您的第一感觉。显然,Append 不在循环中。
  • @roganjosh,好点,稍微修改了解释。当然,循环中的list.append 仍然不是特别有效。
  • 嘿@jpp 感谢您的回答。我会将其标记为已解决,但事实是,我未能解释我的问题。实际上我有真实的数据,而不仅仅是一个范围......我只是把它简化了。
猜你喜欢
  • 2017-08-09
  • 2017-06-12
  • 2019-04-28
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2018-11-25
相关资源
最近更新 更多