pd.append() 是连接两个数据框的最快方法吗?
Is pd.append() the quickest way to join two dataframes?
我正在对 API 进行分页并将请求保存到数据框。
我一次可以收集 100 行,这个循环目前运行了一个多小时。
我担心这是因为一旦我达到超过 100,000 行,追加下 100 行就会变得非常低效。
这是我当前的代码:
while JSONContent['next'][0:10]>unixtime_yesterday:
try:
url=...
JSONContent = requests.request("GET", url).json()
temp_df=json_normalize(JSONContent['data'])
temp_df=temp_df[['email','datetime','Campaign Name']]
temp_df.drop_duplicates(subset=['email','Campaign Name'], keep='last', inplace=True, ignore_index=True)
df_received=df_received.append(temp_df,ignore_index=True,sort=False)
except ValueError:
print('There was a JSONDecodeError')
为了尽可能提高效率,我只保留整个请求中的 3 列。我还删除了 100 行中出现的所有重复项。
当你有多个连续追加时,创建数据帧列表并在最后连接它通常比在每次迭代时使用 pd.append 函数更有效,因为有一些开销pandas 个函数。
例如,
%%timeit
dfs= []
for i in range(10000):
tmp1 = pd.DataFrame([[1,2,3],[1,2,3],[1,2,3]])
dfs.append(tmp1)
pd.concat(dfs)
给出每个循环 1.44 s ± 88.5 ms(7 次运行的平均值 ± 标准偏差,每次 1 个循环)
其中相同的实现但在每次迭代中使用 append 给出
每个循环 2.81 秒 ± 126 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)
我正在对 API 进行分页并将请求保存到数据框。
我一次可以收集 100 行,这个循环目前运行了一个多小时。
我担心这是因为一旦我达到超过 100,000 行,追加下 100 行就会变得非常低效。
这是我当前的代码:
while JSONContent['next'][0:10]>unixtime_yesterday:
try:
url=...
JSONContent = requests.request("GET", url).json()
temp_df=json_normalize(JSONContent['data'])
temp_df=temp_df[['email','datetime','Campaign Name']]
temp_df.drop_duplicates(subset=['email','Campaign Name'], keep='last', inplace=True, ignore_index=True)
df_received=df_received.append(temp_df,ignore_index=True,sort=False)
except ValueError:
print('There was a JSONDecodeError')
为了尽可能提高效率,我只保留整个请求中的 3 列。我还删除了 100 行中出现的所有重复项。
当你有多个连续追加时,创建数据帧列表并在最后连接它通常比在每次迭代时使用 pd.append 函数更有效,因为有一些开销pandas 个函数。
例如,
%%timeit
dfs= []
for i in range(10000):
tmp1 = pd.DataFrame([[1,2,3],[1,2,3],[1,2,3]])
dfs.append(tmp1)
pd.concat(dfs)
给出每个循环 1.44 s ± 88.5 ms(7 次运行的平均值 ± 标准偏差,每次 1 个循环) 其中相同的实现但在每次迭代中使用 append 给出 每个循环 2.81 秒 ± 126 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)