【发布时间】:2021-09-17 14:51:01
【问题描述】:
我们在项目中使用了 pandas 数据框,我们意识到由于 pandas 数据框的计算速度很慢,我们的程序非常慢。我与你分享了我们的代码。
df_item_in_desc = pd.DataFrame(columns = df.columns) # to hold all satisfied results
for index in df.shape[0]:
s1 = set(df.iloc[index]['desc_words_short'])
if item_number in s1:
df_item_in_desc = df_item_in_desc.append(df.iloc[index])
我们检查项目名称是否在另一列 desc_words_short 中,然后我们将该行附加到另一个数据框 (df_item_in_desc)。这是一个简单的逻辑,但要获得这样的行,我们应该遍历所有数据帧并检查该条件。我们的数据框有点大,运行此代码需要更多时间。我们怎样才能加快这个过程,我们可以在这个任务中使用Cpu parallelization,还是别的什么?
注意:我们实际上尝试过 Cpu 并行化,但不会成功。
【问题讨论】:
-
你运行它的机器的内存是多少,你最大的数据集的大小是多少?
-
Ram 为 8 GB,我们的数据集中有大约 100000 个样本。实际上我们的数据集的大小不到 100 MB,并没有那么大。
-
你能举一个你的数据的例子吗?项目有多多样化?您可以尝试首先为每列构建一组项目,以避免在每次迭代时必须遍历所有行。但请注意,实现目标的各种策略的效率会因数据的性质而有很大差异。
-
@mozway 感谢您的回复。实际上变量
item_number保存项目的名称,列desc_words_short保存字符串列表,我们想检查项目名称是否在列desc_words_short中。 -
好的,但这并没有解决关于数据类型的问题。根据您是否有很多不同的项目、许多相似的项目、重复项目等,将改变尝试解决问题的方式。由于您的目标是优化速度,我认为如果不提供数据集,您将无法获得体面的响应。
标签: python pandas multiprocessing