1

pickle を使用して、他のデータセットから生成したいくつかの大規模なデータセットを保存しようとしています。ダンプ中にエラーは発生しませんが、これらのデータセットをロードしようとすると、ピクルは eof エラーで終了します。以下は、データセットを保存するために実行するコードです。

from scipy.stats.mstats import mode
trainingSetCustomers = pd.DataFrame({'visitFrequency': trainingSet.size(),'totalAmountSpent': trainingSet['amountSpent'].sum(),'totalProducts': trainingSet['productCount'].sum(),'firstVisit': trainingSet['visitDate'].min(),'lastVisit': trainingSet['visitDate'].max(),'visitType':trainingSet['visitType'].apply(f),'country': trainingSet['country'].apply(f),'isReferred':trainingSet['isReferred'].sum()}).reset_index()
p2 = pickle.Pickler(open("trainingSetCustomers.p","wb")) #finaldatasetYear1AndYear2 #trainingset groupedCustomersWithDates dfOrdersNew groupedCustomersNew
p2.clear_memo()
p2.dump(trainingSetCustomers)
print "Training Set saved" #Done
trainingResultSetCustomers = pd.DataFrame({'futureVisitFrequency': trainingResultSet.size(),'futureTotalAmountSpent': trainingResultSet['amountSpent'].sum(),'futureTotalProducts': trainingResultSet['productCount'].sum(),'firstVisit': trainingResultSet['visitDate'].min(),'lastVisit': trainingResultSet['visitDate'].max(),'visitType':trainingResultSet['visitType'].apply(f),'country': trainingResultSet['country'].apply(f),'isReferred':trainingResultSet['isReferred'].sum()}).reset_index()
p3 = pickle.Pickler(open("trainingResultSetCustomers.p","wb")) #finaldatasetYear1AndYear2 #trainingset groupedCustomersWithDates dfOrdersNew groupedCustomersNew
p3.clear_memo()
p3.dump(trainingResultSetCustomers)
print "trainingresult set saved" #Done

これはエラーなしで実行され、メッセージが出力されます。しかし、次のコードを実行すると:

trainingResultSetCustomers = pickle.load( open( "trainingResultSetCustomers.p", "rb" ) )

それは私に EoFError を与えます。これらの種類のテスト セットを 4 つ保存する必要がありますが、なぜこれが起こっているのか本当に混乱しています。違いがある場合は、sshを介してIPythonノートブックで実行しています。また、5行だけでこれを試すと、完全に機能します

データ構造: コードからわかるように、このデータフレームはグループ化されたオブジェクトのプロパティによって生成されます。

これは私が得るエラーです:

EOFError                                  Traceback (most recent call last)
<ipython-input-10-86d38895c564> in <module>()
      5 p = pickle.Pickler(o) #finaldatasetYear1AndYear2 #trainingset groupedCustomersWithDates dfOrdersNew groupedCustomersNew
      6 p.clear_memo()
----> 7 trainingset = pickle.load(o)
      8 o.close()
      9 print "done"

/usr/lib/python2.7/pickle.pyc in load(file)
   1376 
   1377 def load(file):
-> 1378     return Unpickler(file).load()
   1379 
   1380 def loads(str):

/usr/lib/python2.7/pickle.pyc in load(self)
    856             while 1:
    857                 key = read(1)
--> 858                 dispatch[key](self)
    859         except _Stop, stopinst:
    860             return stopinst.value

/usr/lib/python2.7/pickle.pyc in load_eof(self)
    878 
    879     def load_eof(self):
--> 880         raise EOFError
    881     dispatch[''] = load_eof
    882 
4

1 に答える 1

0

pandas.Dataframeいくつかのテスト コードとバージョン番号がないため、オブジェクトを使用していることしかわかりません。これらの人は、組み込みpandasの酸洗メソッドに組み込まれている特別な処理が必要になることがよくあります。の酸洗を提供するとメソッドpandasの両方を提供すると思います。参照: PANDAS、Python 、およびリンクを使用してデータ フレームを保存する方法。to_picklesaveDataframe

また、ピクルしようとしている a の大きDataframeさと依存関係のバージョンによっては、64 ビットのピクル バグに遭遇する可能性があります。参照: DataFrame の酸洗

また、シリアル化されたデータを経由で送信sshしている場合は、何らかのsshパケット制限に達していないことを確認することをお勧めします。を介してコードを実行しているだけであればssh、これは潜在的な問題ではありません。

于 2014-11-29T13:34:45.657 に答える