ฉันมีข้อมูลที่บันทึกไว้ในpostgreSQL
ฐานข้อมูล ฉันกำลังค้นหาข้อมูลนี้โดยใช้ Python2.7 และเปลี่ยนเป็น Pandas DataFrame อย่างไรก็ตามคอลัมน์สุดท้ายของดาต้าเฟรมนี้มีพจนานุกรม (หรือรายการ?) ของค่าอยู่ภายใน 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 ค่าเดียวกันคือ a, b และ c และมักจะปรากฏในลำดับเดียวกันเสมอ (a แรก, b วินาที, c สาม)
รหัสต่อไปนี้ใช้ในการทำงานและส่งคืนสิ่งที่ฉันต้องการ (df2)
[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()
เมธอดและ. ใช้ไม่ทำงานกับรหัสของฉันเพราะเป็นUnicode
สตริงเดียวเช่น:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
ข้อมูลกำลังนำเข้าจากpostgreSQL
ฐานข้อมูลในรูปแบบนี้ ความช่วยเหลือหรือความคิดเกี่ยวกับปัญหานี้หรือไม่? มีวิธีการแปลงUnicode
หรือไม่
pd.DataFrame(df[col].tolist())
มานานไม่เคยคิดเกี่ยวกับapply(pd.Series)
. ดีมาก.