Разделить/разбить столбец словарей на отдельные столбцы с помощью пандPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разделить/разбить столбец словарей на отдельные столбцы с помощью панд

Сообщение Anonymous »

У меня есть данные, сохраненные в базе данных postgreSQL. Я запрашиваю эти данные с помощью Python2.7 и превращаю их в DataFrame Pandas. Однако последний столбец этого фрейма данных содержит внутри себя словарь значений. DataFrame 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 `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
Основная проблема, с которой я столкнулся, заключается в том, что списки имеют разную длину. Но все списки содержат не более трех одинаковых значений: «a», «b» и «c». И они всегда появляются в одном и том же порядке (сначала «a», второй «b», третий «c»).
Следующий код ИСПОЛЬЗУЕТСЯ для работы и возврата именно того, что я хотел (df2 ).

Код: Выделить всё

objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)
print(df2)
Я запускал этот код только на прошлой неделе, и он работал нормально. Но теперь мой код не работает, и я получаю эту ошибку в строке [4]:

Код: Выделить всё

IndexError: out-of-bounds on slice (end)
Я не вносил никаких изменений в код, но теперь получаю сообщение об ошибке. Я считаю, что это связано с тем, что мой метод не является надежным и правильным.
Любые предложения или рекомендации о том, как разделить этот столбец списков на отдельные столбцы, будут очень признательны!РЕДАКТИРОВАТЬ: Я думаю, что методы .tolist() и .apply не работают с моим кодом, потому что это одна строка Unicode, т.е.:

Код: Выделить всё

#My data format
u{'a': '1', 'b': '2', 'c': '3'}

#and not
{u'a': '1', u'b': '2', u'c': '3'}
Данные импортируются из базы данных postgreSQL в этом формате. Любая помощь или идеи по этому вопросу? есть ли способ конвертировать Юникод?

Подробнее здесь: https://stackoverflow.com/questions/382 ... ith-pandas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»