Почему первая операция с Pandas DataFrame занимает больше всего времени? - PullRequest
1 голос
/ 08 апреля 2020

Я выполнял некоторое профилирование некоторых Pandas операций DataFrame и заметил, что первая операция занимает значительно больше времени, есть какие-то издержки c.

Например, в записная книжка:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': np.random.randn(1000), 'b': np.random.randn(1000)})

%%time
df['sum'] = df['a'] + df['b']

Время стены: 14 мс


%%time
df['sum2'] = df['a'] + df['b']

Время стены: 1 мс


I сделал% prun и увидел, что первая операция делает вызовы nt.stat, winreg.OpenKey, как будто он выполняет некоторые операции с файловой системой по какой-то причине. Я заметил подобное поведение и на Linux машине.

В чем причина и возможно ли это исправить? Это действительно замедляет некоторую обработку, которую я выполняю, включая выполнение пакета операций над набором небольших DataFrames и выполнение этой первой операции, которая занимает больше времени, чем все остальные вместе взятые ... Любая помощь будет принята с благодарностью!

Использование Python 3.5.3 и Pandas 0.25.3

1 Ответ

0 голосов
/ 08 апреля 2020

Эта проблема возникала несколько раз за один сеанс (не только один раз для импорта), но я выяснил, почему. Это потому, что я получал свой список DataFrames от итерации по результату groupby (), который возвращал срезы DataFrame, а затем назначая новые столбцы срезами, что приводило к предупреждению:

SettingWithCopyWarning: значение пытается быть установленным на копии среза из DataFrame.

Это не показывалось, потому что процесс выполнялся веб-сервером. Каждый раз, когда появляется это предупреждение, это вызывает задержку, которую я заметил.

Исправлена ​​проблема, создавая копию входного DataFrame перед применением операций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...