Расширение поляров DataFrame при сохранении переменных между вызовамиPython

Программы на Python
Ответить
Anonymous
 Расширение поляров DataFrame при сохранении переменных между вызовами

Сообщение Anonymous »

Я хотел бы написать регистратор для поляров, используя API пользовательского пространства имен.
Например, начиная с:

Код: Выделить всё

import logging
import polars as pl

penguins_pl = pl.read_csv("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/penguins.csv")
моя цель – получить

Код: Выделить всё

penguins_pl.mine.startlog().filter(pl.col("species")=="Adelie").mine.endlog()
log "192 строки были удалены".
План состоит в том, чтобы startlog сохранял форму кадра данных во временной переменной, а затем повторно использовал ее в endlog.
Я пробовал это:

Код: Выделить всё

@pl.api.register_dataframe_namespace("mine")
class MinePolarsDataframeUtils:
def __init__(self, df: pl.DataFrame):
self._df = df

def startlog(self):
self._shape = self._df.shape
return(self._df)

def endlog(self):
if not self._shape:
raise ValueError("startlog() must be called before endlog()")
dr = self._shape[0] - self._df.shape[0]
dc = self._shape[1] - self._df.shape[1]
logging.getLogger("polars_logger").info(f"Rows added {dr}, cols added {dc}")
self._shape = None
return(self._df)
Но это не работает, поскольку MinePolarsDataframeUtils инициализируется как при вызове startlog, так и при вызове endlog.
То есть, когда вызывается endlog, класс запускается с нуля, и значение self._shape, сохраненное startlog, не переносится.
То есть, когда endlog вызывается, self._shape не определен.
Как сохранить пользовательские переменные между вызовами при расширении поляров?
Связано: запись результатов операции в pandas (эквивалент STATA/tidylog)
Связано: https://stackoverflow.com/a/71729343/1719931

Подробнее здесь: https://stackoverflow.com/questions/798 ... ween-calls
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»