Mam dane zapisane w postgreSQL
bazie danych. Pytam o te dane za pomocą Python2.7 i zamieniam je w Pandas DataFrame. Jednak w ostatniej kolumnie tej ramki danych znajduje się słownik (lub lista?) Wartości. DataFrame wygląda następująco:
[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"}
Muszę podzielić tę kolumnę na osobne kolumny, aby DataFrame wyglądała następująco:
[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
Głównym problemem, który mam, jest to, że listy nie są tej samej długości. Ale wszystkie listy zawierają maksymalnie te same 3 wartości: a, b i c. I zawsze pojawiają się w tej samej kolejności (a pierwsza, b druga, c trzecia).
Poniższy kod UŻYWANY do działania i zwracania dokładnie tego, co chciałem (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)
Uruchomiłem ten kod w zeszłym tygodniu i działał dobrze. Ale teraz mój kod jest uszkodzony i otrzymuję ten błąd z wiersza [4]:
IndexError: out-of-bounds on slice (end)
Nie wprowadziłem żadnych zmian w kodzie, ale teraz pojawia się błąd. Czuję, że jest to spowodowane tym, że moja metoda nie jest solidna ani właściwa.
Wszelkie sugestie lub wskazówki, jak podzielić tę kolumnę list na oddzielne kolumny, będą bardzo mile widziane!
EDYCJA: Myślę, że metody .tolist()
i .apply nie działają na moim kodzie, ponieważ jest to jeden Unicode
ciąg, tj .:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Dane są importowane z postgreSQL
bazy danych w tym formacie. Jakaś pomoc lub pomysły dotyczące tego problemu? czy istnieje sposób na konwersję Unicode
?
pd.DataFrame(df[col].tolist())
dawna, nigdy o tym nie myślałemapply(pd.Series)
. Bardzo dobrze.