में मिश्रित डेटा और श्रेणी के साथ पांडा डेटाफ्रेम संग्रह करना मैं एक एचडीएफ 5 फ़ाइल में विभिन्न स्तंभों के साथ डेटा फ्रेम को स्टोर करना चाहता हूं (नीचे डेटा प्रकारों के साथ एक अंश पाएं)।एचडीएफ 5
In [1]: mydf
Out [1]:
endTime uint32
distance float16
signature category
anchorName category
stationList object
कुछ स्तंभ (ऊपर मेरी अंश में हस्ताक्षर और anchorName) परिवर्तित करने से पहले, मैं यह स्टोर करने के लिए (जो बहुत ठीक काम करता है) के बाद की तरह कोड का इस्तेमाल किया:
path = 'tmp4.hdf5'
key = 'journeys'
mydf.to_hdf(path, key, mode='w', complevel=9, complib='bzip2')
लेकिन यह वर्ग के साथ काम नहीं करता है
path = 'tmp4.hdf5'
key = 'journeys'
mydf.to_hdf(path, key, mode='w', format='t', complevel=9, complib='bzip2')
यह ठीक काम करता है, अगर मैं स्तंभ stationList, जहां प्रत्येक प्रविष्टि स्ट्रिंग की एक सूची है निकालें: और फिर मैं निम्नलिखित की कोशिश की। लेकिन इस कॉलम के साथ मुझे निम्नलिखित अपवाद मिला:
Cannot serialize the column [stationList] because
its data contents are [mixed] object dtype
डेटा फ्रेम संग्रहीत करने के लिए मुझे अपने कोड को बेहतर बनाने की आवश्यकता कैसे है?
पांडा संस्करण: 0.17.1
अजगर संस्करण:
import pandas as pd
mydf = pd.DataFrame({'endTime' : pd.Series([1443525810,1443540836,1443609470]),
'distance' : pd.Series([454.75,477.25,242.12]),
'signature' : pd.Series(['ab','cd','ab']),
'anchorName' : pd.Series(['tec','ing','pol']),
'stationList' : pd.Series([['t1','t2','t3'],['4','t2','t3'],['t3','t2','t4']])
})
# this works fine (no category)
mydf.to_hdf('tmp_without_cat.hdf5', 'journeys', mode='w', complevel=9, complib='bzip2')
for col in ['anchorName', 'signature']:
mydf[col] = mydf[col].astype('category')
# this crashes now because of category data
# mydf.to_hdf('tmp_with_cat.hdf5', 'journeys', mode='w', complevel=9, complib='bzip2')
# switching to format='t'
# this caused problems because of "mixed data" in column stationList
mydf.to_hdf('tmp_with_cat.hdf5', 'journeys', mode='w', format='t', complevel=9, complib='bzip2')
mydf.pop('stationList')
# this again works fine
mydf.to_hdf('tmp_with_cat_without_stationList.hdf5', 'journeys', mode='w', format='t', complevel=9, complib='bzip2')
: 2.7.6
edit1 (कुछ नमूना कोड) (यह compability कारणों की वजह से नहीं बदल सकते हैं)
संपादित 2: इस बीच मैंने इस समस्या से छुटकारा पाने के लिए विभिन्न चीजों की कोशिश की। इनमें से एक कॉलम स्टेशन सूची की प्रविष्टियों को टुपल्स में परिवर्तित करना था (संभव है क्योंकि उन्हें बदला नहीं जाएगा) और इसे श्रेणी में भी परिवर्तित करने के लिए। लेकिन यह कुछ भी नहीं बदला। आप दो समस्याएं हैं
mydf.stationList = [tuple(x) for x in mydf.stationList.values]
mydf.stationList.astype('category')
क्या यह एक सवाल है? यदि आप परीक्षण डेटाफ्रेम बनाने के लिए वास्तविक कोड पोस्ट करते हैं तो यह भी मदद करेगा। – Goyo
यह समस्या है। मुझे अन्य फ़ाइलों से डेटा मिलता है जो कुछ अन्य स्क्रिप्ट द्वारा संग्रहीत किए जाते थे। मैं एक मूल डेटा पीढ़ी बनाने की कोशिश करूंगा जो मेरी समस्या दिखा सकता है। – AnnetteC
ऐसा लगता है कि आप अब तक एक ही एचडीएफ 5 प्रारूप में दोनों श्रेणियों और सूचियों/tuples को स्टोर नहीं कर सकते हैं (यह भविष्य में तय किया जा सकता है)। मैं आपको बता नहीं सकता कि आपकी आवश्यकताओं के बारे में और जानने के बिना क्या बदला जाए। हो सकता है कि स्ट्रिंग्स स्ट्रिंग्स के रूप में छोड़ दें, शायद स्टेशन सूची आइटम के लिए एक अलग प्रतिनिधित्व चुनें ... बहुत सारे विकल्प हैं। – Goyo