ile geriye dönük uyumluluk sorunu Pandalar zaman serileri verisi için birincil veri kabımız olarak Dataframe kullanıyoruz. Veri dizisini, zaman bloğu blobuna ilişkin meta veriler için tuşlarla birlikte depolamak için bir mongoDB belgesine ikili bloklara alıyoruz.Turşu 0.14.1 ve 0.15.2
0.14.1'den 0.15.2'ye kadar pandalardan yükseltdiğimizde bir hatayla karşılaştık.
pandalar binary blob Dataframe (0.14.1)
import lz4
import cPickle
bd = lz4.compress(cPickle.dumps(df,cPickle.HIGHEST_PROTOCOL))
Hata Vaka oluşturun: pandalar 0.15.2
cPickle.loads(lz4.decompress(bd))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-37-76f7b0b41426> in <module>()
----> 1 cPickle.loads(lz4.decompress(bd))
TypeError: ('_reconstruct: First argument must be a sub-type of ndarray', <built-in function _reconstruct>, (<class 'pandas.core.index.Index'>, (0,), 'b'))
Başarı Örneği ile mongodb geri Oku: Okuma hiçbir hata ile pandalar 0.14.1 ile mongoDB dan geri.
Bu https://stackoverflow.com/users/644898/jeff
The error message you are seeing `TypeError: _reconstruct: First argument must be a sub-type of ndarray is that the python default unpickler makes sure that the class hierarchy that was pickled is exactly the same what it is recreating. Since Series has changed between versions this is no longer possible with the default unpickler, (this IMHO is a bug in the way pickle works). In any event, pandas will unpickle pre-0.13 pickles that have Series objects."
çözüm veya çözümler üzerinde herhangi bir fikir gelen bir yardımcı açıklama ile eski yığın iplik Pandas compiled from source: default pickle behavior changed benzer gibi görünüyor?
df = pd.DataFrame(np.random.randn(10,10))
cPickle.dump(df,open("cp0141.p","wb"))
cPickle.load(open('cp0141.p','r')) # no error
pandalar içinde 0.15.2 env hatayı oluştur:
cPickle.load(open('cp0141.p','r'))
TypeError: ('_reconstruct: First argument must be a sub-type of ndarray', <built-in function_reconstruct>, (<class 'pandas.core.index.Int64Index'>, (0,), 'b'))
+1 !, Önemli olan: Turşu bir dataframe olmadığı zaman bile bu çalışır :)! En azından benim durumumda çalıştı ve dize anahtarları ve Datafram'ları içeren bir dizini değerler olarak sakladım. – ntg