2

これは、ピクルスの扱い方を知っている多くの人にとって基本的なことだと思います。ただし、数時間試しても、まだうまくいきません。次のコードがあります。

最初のファイルで

import pandas as pd

names = ["John", "Mary", "Mary", "Suzanne", "John", "Suzanne"]
scores = [80, 90, 90, 92, 95, 100]

records = pd.DataFrame({"name": names, "score": scores})
means = records.groupby('name').mean()

def name_score_function(record):
    if record in names:
        return(means.loc[record, 'score'])

import dill as pickle
with open('name_model.pkl', 'wb') as file:
    pickle.dump(means, file)

2 番目のファイル

最初のファイルにあるものをロードし、関数 name_model(record) を介して呼び出し可能な人物 (つまり、ジョン、メアリー、スザンヌ) のスコアを作成したいと思います。

import dill as pickle
B = pickle.load('name_model.pkl')

def name_model(record):
    if record in names:
        return(means.loc[record, 'score'])

ここにエラーが表示されます:

File "names.py", line 21, in <module>
B = pickle.load('name_model.pkl')
File "/opt/conda/lib/python2.7/site-packages/dill/dill.py", line 197, in load
pik = Unpickler(file)
File "/opt/conda/lib/python2.7/site-packages/dill/dill.py", line 356, in __init__
StockUnpickler.__init__(self, *args, **kwds)
File "/opt/conda/lib/python2.7/pickle.py", line 847, in __init__
self.readline = file.readline
AttributeError: 'str' object has no attribute 'readline'

このエラーは、ピクルスについての私の理解不足に起因することを知っています。このコードを改善するために、あなたの意見を謙虚に受け入れます。ありがとうございました!!

更新 私が達成したいより具体的なこと:

最初のファイルに書き込んでダンプし、2 番目のファイルに読み込んで、この関数を使用してレコード内の任意の人の平均スコアを照会できるようにしたいと考えています。

ここに私が持っているものがあります:

import pandas as pd

names = ["John", "Mary", "Mary", "Suzanne", "John", "Suzanne"]
scores = [80, 90, 90, 92, 95, 100]

records = pd.DataFrame({"name": names, "score": scores})
means = records.groupby('name').mean()

def name_score_function(record):
if record in names:
    return(means.loc[record, 'score'])

B = name_score_function(record)

import dill as pickle
with open('name_model.pkl', 'wb') as file:
    pickle.dump(B, file)

with open('name_model.pkl', 'rb') as file:
    B = pickle.load(f)

def name_model(record):
   return B(record)

print(name_model("John"))  

このコードを実行すると、このエラーが発生しますFile "test.py", line 13, in <module> B = name_score_function(record) NameError: name 'record' is not defined

ご理解とご協力を賜りますようお願い申し上げます。

4

2 に答える 2

8

ありがとうございました。以下で解決できそうです。

import pandas as pd

names = ["John", "Mary", "Mary", "Suzanne", "John", "Suzanne"]
scores = [80, 90, 90, 92, 95, 100]

records = pd.DataFrame({"name": names, "score": scores})
means = records.groupby('name').mean()

import dill as pickle
with open('name_model.pkl', 'wb') as file:
    pickle.dump(means, file)

with open('name_model.pkl', 'rb') as file:
    B = pickle.load(file)

def name_score_function(record):
    if record in names:
        return(means.loc[record, 'score'])

print(name_score_function("John"))
于 2016-07-20T14:32:13.847 に答える