如何加快此方法?

时间:2019-08-30 13:54:21

标签: python pandas numpy optimization iteration

我正在用数据科学代码进行优化,但发现了一种缓慢的方法。我想要一些改善的技巧。现在,我正在测试一个包含43000行的数据帧,并且大约需要50秒才能执行。

我已阅读有关方法trash = moesearch.search(...) print(type(trash)) print(trash) for i, j in enumerate(trash): print(type(j)) ... .loc.iloc.at.iat.iterrows的知识,以获取更好的性能迭代在数据帧中,我认为情况会如此,因为实际上该方法在for循环中运行。

.itertuples

我也很难用[labels_nd_array == label]来了解for循环中发生的事情,第一条语句def slow_method(sliced_data_frame, labels_nd_array): sliced_data_frame['column5'] = -1 # creating a new column for label in np.unique(labels_nd_array): sliced_data_frame['column5'][labels_nd_array == label] = label, return sliced_data_frame 选择了刚刚创建的列,但是下一条使我困惑。

1 个答案:

答案 0 :(得分:0)

我同意Poolka的评论,问题中的代码似乎只做sliced_data_frame['column5'] = labels_nd_array。这是因为,在回答关于[labels_nd_array == label]的重复项时,您首先选择了创建的列,然后在 labels_nd_array == label 处访问其索引,然后将其值从 -1更改为 label

通常,应尽可能避免在行上循环,尤其是在Pandas中,即使DataFrame.iterrows()也会为每行创建一个序列。如您所见,此主题通常在堆栈溢出for example中得到解决。在这里,您遍历一个numpy数组时,这似乎没有必要,而且还要考虑每次迭代时要检查的条件。

通常,如果还有其他遍历行的特定原因,我建议使用DataFrame.to_numpy()(或类似选项)并在NumPy中工作。在NumPy中,默认情况下,遍历行通常更快,但始终尝试进行向量化。最后,在NumPy中,如果确实需要遍历行并且优先考虑性能,则可以使用Numba。