У меня есть данные, сохраненные в базе данных 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. И они всегда появляются в одном порядке (первый, второй, третий).
Следующий код ИСПОЛЬЗУЕТСЯ для работы и возврата именно того, что я хотел (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)
Я не внес изменений в код, но теперь получаю ошибку. Я чувствую, что это связано с тем, что мой метод не является надежным или правильным.
Любые предложения или рекомендации о том, как разделить этот столбец списков на отдельные столбцы, будут оценены по достоинству!
EDIT: Я думаю, что методы .tolist() и .apply не работают над моим кодом, потому что это одна строка в Юникоде, т.е.:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Данные импортируются из базы данных postgreSQL в этом формате. Любая помощь или идеи с этой проблемой? есть ли способ конвертировать Юникод?