Выберите строки в DataFrame на основе значений в столбце в пандах

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

] Метод Dispose этого класса-оболочки должен выпустить обернутый поток, чтобы его можно было собрать мусором. После того, как BitmapImage инициализируется этим потоком обертки, поток оболочки может быть удален, освобождение базового потока и возможность освобождения большого байтового массива.

BitmapImage сохраняет ссылку на источника, поэтому он сохраняет объект MemoryStream живым. К сожалению, несмотря на то, что MemoryStream.Dispose вызывается, он не освобождает массив байтов, который обтекает поток памяти. Таким образом, в этом случае битмап ссылается на поток, который ссылается на буфер, который может занимать много места на большой куче объекта. Не существует истинной утечки памяти; когда больше нет ссылок на растровые изображения, все эти объекты будут (в конечном итоге) собираться мусором. Но поскольку bitmap уже сделал свою собственную частную копию изображения (для рендеринга), кажется довольно расточительным иметь теперь ненужную оригинальную копию растрового изображения все еще в памяти.

blockquote>

Кроме того, какую версию .NET вы используете? До .NET 3.5 SP1 существовала известная проблема, при которой бит-файл BitmapImage мог вызвать утечку памяти . Обходной путь состоял в том, чтобы вызвать Freeze в BitmapImage.

1447
задан daaawx 3 May 2019 в 19:08
поделиться

1 ответ

Больше гибкости с помощью .query с pandas >= 0.25.0:

август 2019 обновил ответ

С тех пор pandas >= 0.25.0, мы можем использовать query метод для фильтрации кадров данных с методами панд и даже именами столбцов, которые имеют пробелы. Обычно пробелы в именах столбцов дали бы ошибку, но теперь мы можем решить то использование обратной галочки ('), см. GitHub:

# Example dataframe
df = pd.DataFrame({'Sender email':['ex@example.com', "reply@shop.com", "buy@shop.com"]})

     Sender email
0  ex@example.com
1  reply@shop.com
2    buy@shop.com

Используя .query с методом str.endswith:

df.query('`Sender email`.str.endswith("@shop.com")')

Вывод

     Sender email
1  reply@shop.com
2    buy@shop.com
<час>

Также мы можем использовать локальные переменные путем добавления префикса его @ в нашем запросе:

domain = 'shop.com'
df.query('`Sender email`.str.endswith(@domain)')

Вывод

     Sender email
1  reply@shop.com
2    buy@shop.com
10
ответ дан 22 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: