Сохранение атрибутов, прикрепленных к dataset в Pandas и Dask

#python #pandas #github #repository #dask

#python #pandas #github #репозиторий #dask

Вопрос:

Я постоянно использую Pandas и Dask. У меня также есть ряд пользовательских классов и функций, которые я часто использую для различных анализов, которые мне всегда приходится редактировать, чтобы учитывать либо Dask, либо Pandas. Я постоянно оказываюсь в ситуации, когда хотел бы назначить атрибуты анализируемому набору данных, минимизируя compute команду из dask, а также упрощая управление функциями при переключении между типами данных. Что-то эффективно похожее на:

 import pandas as pd
import dask.dataframe as dd
from pydataset import data

df = data('titanic')

setattr(df, 'vals12', 1)

test = dd.from_pandas(df, npartitions = 2)
test.vals12 #would still contain the attribute vals12

df  = test.compute()
df.vals12 #would still contain the attribute vals12
 

Однако я не знаю способа добиться этого без редактирования базовых пакетов (Pandas / Dask). В результате мне было интересно, есть ли способ выполнить приведенный выше пример без создания нового класса (или статической версии пакетов) или есть ли способ «разветвлять» репозитории непубличным способом (позволяя добавлять мои изменения, но все же позволяямне легко получить будущие функции без боли)?

Ответ №1:

В предстоящем выпуске Dask вы сможете сделать это, используя недавнюю attrs функцию в pandas 1.0. На данный момент вы можете установить dask с Github, чтобы использовать эту функциональность.

 import pandas as pd
import dask.dataframe as dd

df = pd.DataFrame({
    "a":[0,1,2],
    "b":[2,3,4]
})
df.attrs["vals12"] = 1

ddf = dd.from_pandas(df, npartitions=2)
ddf.attrs
{'vals12': 1}
 

Комментарии:

1. Похоже, что это не attrs сохраняется после вызова compute для фрейма данных dask, например df2 = ddf.compute() . То есть df2.attrs будет пустым.