Saya memiliki data yang disimpan dalam database postgreSQL. Saya menanyakan data ini menggunakan Python2.7 dan mengubahnya menjadi Pandas DataFrame. Namun, kolom terakhir dari kerangka data ini memiliki kamus (atau daftar?) Dari nilai-nilai di dalamnya. DataFrame terlihat seperti ini:
[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"}
Saya perlu membagi kolom ini menjadi kolom terpisah sehingga DataFrame terlihat seperti ini:
[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
Masalah utama yang saya alami adalah bahwa daftar itu tidak sama panjangnya. Tetapi semua daftar hanya berisi hingga 3 nilai yang sama: a, b, dan c. Dan mereka selalu muncul dalam urutan yang sama (yang pertama, b detik, c ketiga).
Kode berikut DIGUNAKAN untuk bekerja dan mengembalikan apa yang saya inginkan (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)
Saya menjalankan kode ini minggu lalu dan berfungsi dengan baik. Tapi sekarang kode saya rusak dan saya mendapatkan kesalahan ini dari baris [4]:
IndexError: out-of-bounds on slice (end)
Saya tidak membuat perubahan pada kode tetapi sekarang saya mendapatkan kesalahan. Saya merasa ini karena metode saya tidak kuat atau tidak tepat.
Setiap saran atau panduan tentang cara membagi kolom daftar ini menjadi kolom terpisah akan sangat dihargai!
EDIT: Saya pikir metode .tolist () dan .apply tidak bekerja pada kode saya karena itu adalah satu string unicode, yaitu:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Data mengimpor dari database postgreSQL dalam format ini. Adakah bantuan atau ide dengan masalah ini? apakah ada cara untuk mengubah unicode?
iloc[:, :3]
asumsi akan ada 3 item, dan mungkin irisan data yang lebih baru hanya memiliki 1 atau 2 (misalnya tidak ada b
suka dalam index 8813
)?
iloc
bagian