मेरे पास एक postgreSQL डेटाबेस में डेटा सहेजा गया है। मैं Python2.7 का उपयोग करके इस डेटा को पूछ रहा हूं और इसे पांडस डेटाफ्रेम में बदल रहा हूं। हालांकि, इस डेटाफ्रेम के अंतिम कॉलम में इसके मूल्यों का एक शब्दकोश (या सूची?) है। DataFrame इस तरह दिखता है:अलग-अलग कॉलम में पांडस कॉलम के अंदर शब्दकोश/सूची को विभाजित करना
[1] df
Station ID Pollutants
8809 {"a": "46", "b": "3", "c": "12"}
8810 {"a": "36", "b": "5", "c": "8"}
8811 {"b": "2", "c": "7"}
8812 {"c": "11"}
8813 {"a": "82", "c": "15"}
मैं अलग-अलग कॉलम में इस स्तंभ को विभाजित करने की जरूरत है ताकि DataFrame इस तरह दिखता है:
[2] df2
Station ID a b c
8809 46 3 12
8810 36 5 8
8811 NaN 2 7
8812 NaN NaN 11
8813 82 NaN 15
प्रमुख मुद्दा रहा हो रही है कि सूचियों नहीं हैं वही लंबाई लेकिन सभी सूचियों में केवल एक ही 3 मान होते हैं: ए, बी, और सी। और वे हमेशा एक ही क्रम में दिखाई देते हैं (पहला, बी दूसरा, सी तीसरा)।
निम्नलिखित कोड काम करने के लिए उपयोग किया गया और ठीक वही वापस लौटा जो मैं चाहता था (डीएफ 2)।
[3] df
[4] objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
[5] df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)
[6] print(df2)
मैं पिछले सप्ताह इस कोड को चला रहा था और यह ठीक काम कर रहा था। लेकिन अब मेरी कोड टूट गया है और लाइन [4] से इस त्रुटि मिलती है:
IndexError: out-of-bounds on slice (end)
मैं कोड के लिए कोई परिवर्तन नहीं किए, लेकिन अब त्रुटि हो रही है। मुझे लगता है कि यह मेरी विधि के कारण मजबूत या उचित नहीं है।
सूचियों के इस कॉलम को अलग-अलग कॉलम में विभाजित करने के बारे में कोई सुझाव या मार्गदर्शन अत्यधिक सराहना की जाएगी!
संपादित करें: मुझे लगता है .tolist() और .apply तरीकों मेरी कोड पर काम नहीं कर रहे हैं, क्योंकि यह एक यूनिकोड स्ट्रिंग, यानी है:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
डेटा इस प्रारूप में PostgreSQL डेटाबेस से आयात कर रहा है । इस मुद्दे के साथ कोई मदद या विचार? यूनिकोड को बदलने का कोई तरीका है?
मैं एक अलग समाधान के साथ उत्तर दिया, लेकिन अपने कोड वास्तव में भी ठीक काम करना चाहिए। नीचे मेरे डमी उदाहरण का उपयोग करके, यह पांडा 0.18.1 का उपयोग करके काम करता है अगर मैं 'iloc' भाग – joris
छोड़ देता हूं इसका हिस्सा यह है कि 'iloc [:,: 3]' मानता है कि वहां 3 आइटम होंगे, और शायद हालिया डेटा स्लाइस में केवल 1 या 2 होता है (उदाहरण के लिए 'इंडेक्स 8813'' में कोई 'बी' नहीं होता है)? – dwanderson