Как найти вызывающую строку в выводе профиля Python - PullRequest
0 голосов
/ 20 сентября 2019

Я использую Python pprofile от vpelletier (https://github.com/vpelletier/pprofile).

Я получил огромный вывод в 130293 строки. Я нашел проблему, глядя на следующее:

    83|  430| 0.0129273|  3.00635e-05|  0.04%| df_func.loc[:, col_name] = new_ser
(call)|  430|   12.4897|    0.0290459| 35.87%|# \pandas\core\indexing.py:199 __setitem__

Просмотря догадался , что строка 83 вызывает pandas \ indexing.py: 199 _setitem__, что занимает 12,4 секунды. Это не идеально, но по крайней мере я знаю, какая строка кода, которую я написал, занимает время только потому, чтофактическая строка, которая занимает время, сразу же появляется в журнале.

У меня есть еще один фрагмент из вывода профиля; (последняя строка, которая занимает 6,11 секунды).

   313|       448|    0.0039854|  8.89599e-06|  0.01%|    def _setitem_with_indexer(self, indexer, value):
   314|       448|   0.00299239|  6.67945e-06|  0.01%|        self._has_valid_setitem_indexer(indexer)
(call)|       448|   0.00298953|  6.67306e-06|  0.01%|# \pandas\core\indexing.py:281 _has_valid_setitem_indexer
   315|         0|            0|            0|  0.00%|
   316|         0|            0|            0|  0.00%|        # also has the side effect of consolidating in-place
   317|       448|   0.00299144|  6.67732e-06|  0.01%|        from pandas import Series
(call)|       448|    0.0189428|  4.22831e-05|  0.05%|# <frozen importlib._bootstrap>:1009 _handle_fromlist
   318|         0|            0|            0|  0.00%|
   319|       448|   0.00398803|  8.90185e-06|  0.01%|        info_axis = self.obj._info_axis_number
   320|         0|            0|            0|  0.00%|
   321|         0|            0|            0|  0.00%|        # maybe partial set
   322|       448|    0.0069797|  1.55797e-05|  0.02%|        take_split_path = self.obj._is_mixed_type
(call)|       448|      6.11485|    0.0136492| 17.56%|# \pandas\core\generic.py:5276 _is_mixed_type

Не могу на всю жизньиз меня выяснить, какая строка кода называется функцией _setitem_with_indexer в pandas. Я хочу, чтобы строка кода original , которую я написал, была идентифицирована, которая в свою очередь вызывает эту функцию pandas, которая занимает 6.11секунд.

Я надеюсь, что вопрос ясен.

PS: Любые идеи о том, как я могу написать df_func.loc[:, col_name] = new_ser лучше, чтобы он работал быстрее, тоже приветствуются.

Второйсвязанный вопрос: есть ли у line_profiler (https://github.com/rkern/line_profiler) эта ссылка?Я не могу установить профилировщик строки kern на win 10.

...