PostgreSQL veritabanına kaydedilmiş verilerim var. Bu verileri Python2.7 kullanarak sorguluyorum ve bir Pandas DataFrame'e dönüştürüyorum. Bununla birlikte, bu veri çerçevesinin son sütununun içinde değerler sözlüğü (veya listesi?) Vardır. DataFrame şuna benzer:
[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'in şöyle görünmesi için bu sütunu ayrı sütunlara bölmem gerekiyor:
[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
Yaşadığım en büyük sorun, listelerin aynı uzunlukta olmaması. Ancak tüm listeler yalnızca aynı 3 değeri içerir: a, b ve c. Ve her zaman aynı sırada görünürler (a birinci, b ikinci, c üçüncü).
Aşağıdaki kod, çalışmak ve tam olarak istediğim şeyi döndürmek için KULLANILMIŞTIR (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)
Bu kodu daha geçen hafta çalıştırıyordum ve iyi çalışıyordu. Ama şimdi kodum bozuldu ve bu hatayı [4] satırından alıyorum:
IndexError: out-of-bounds on slice (end)
Kodda hiçbir değişiklik yapmadım ancak şimdi hatayı alıyorum. Bunun yöntemimin sağlam veya uygun olmamasından kaynaklandığını hissediyorum.
Bu liste sütununun ayrı sütunlara nasıl bölüneceğine dair herhangi bir öneri veya rehberlik çok takdir edilecektir!
DÜZENLEME: .tolist () ve .apply yöntemlerinin kodum üzerinde çalışmadığını düşünüyorum çünkü bu bir unicode dizesi, yani:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Veriler, postgreSQL veritabanından bu biçimde içe aktarılır. Bu sorunla ilgili herhangi bir yardım veya fikir var mı? unicode'u dönüştürmenin bir yolu var mı?
iloc[:, :3]
3 öğe olacağı ve belki daha yeni veri dilimlerinde sadece 1 veya 2 olacağı varsayılıyor mu (örneğin, içinde b
benzeri yok index 8813
)?
iloc
parçayı dışarıda bırakırsam pandalar 0.18.1 kullanarak çalışır