#python #dill
#python #dill
Вопрос:
У меня есть функция в одном файле python file1.py
, где я сбросил функцию, используя dill. Когда я попытался загрузить второй файл file2.py
, я получил сообщение об ошибке ниже:
TypeError: 'bytes' object is not callable
file1.py
def handle_nulls(df):
df = df[df['account_status'].notna()]
df = df[df['probability'].notna()]
max = df['am_daysincelast_txn'].max()
df['am_daysincelast_txn'].fillna(max, inplace=True)
return df
with open("handle_nulls.dill", "wb") as f:
dill.dump(handle_nulls, f, protocol=pickle.HIGHEST_PROTOCOL)
file2.py
with open("handle_nulls.dill", "rb") as f:
handle_nulls = dill.load(f)
df = handle_nulls(df)
Мой способ, похоже, не работает.
Ответ №1:
Трудно дать вам диагноз заполнения без полного кода (т. Е. Без фрейма данных) или информации о версии — особенно, если вы, скажем, переходите с одного компьютера на другой — но, похоже, ваш приведенный выше код работает, как есть, по крайней мере, в python 3.6, где Я проверил это.
>>> import dill
>>>
>>> def handle_nulls(df):
... df = df[df['account_status'].notna()]
... df = df[df['probability'].notna()]
... max = df['am_daysincelast_txn'].max()
... df['am_daysincelast_txn'].fillna(max, inplace=True)
... return df
...
>>> with open("handle_nulls.dill", "wb") as f:
... dill.dump(handle_nulls, f, protocol=dill.HIGHEST_PROTOCOL)
затем в новом сеансе:
>>> import dill
>>> import pandas as pd
>>>
>>> with open('handle_nulls.dill', 'rb') as f:
... handle_nulls = dill.load(f)
>>>
>>> import numpy as np
>>> df = pd.DataFrame(dict(account_status=pd.Series([np.nan,1,2,3,4,np.nan,6])))
>>> df['probability'] = pd.Series([0,1,np.nan,np.nan,4,5,6])
>>> df['am_daysincelast_txn'] = pd.Series([10,23,12,9,30,12,11])
>>>
>>> df
account_status probability am_daysincelast_txn
0 NaN 0.0 10
1 1.0 1.0 23
2 2.0 NaN 12
3 3.0 NaN 9
4 4.0 4.0 30
5 NaN 5.0 12
6 6.0 6.0 11
>>>
>>> handle_nulls(df)
account_status probability am_daysincelast_txn
1 1.0 1.0 23
4 4.0 4.0 30
6 6.0 6.0 11
>>>