У мене збережені дані в базі даних 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
Основна проблема, яка у мене виникає, полягає в тому, що списки не мають однакової тривалості. Але всі списки містять до трьох однакових значень: a, b і c. І вони завжди з’являються в одному порядку (перший, 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 методи не працюють на моєму коді, оскільки це одна рядок unicode, тобто:
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
Дані імпортуються з бази даних postgreSQL у такому форматі. Будь-яка допомога чи ідеї з цим питанням? чи є спосіб перетворити унікод?
iloc[:, :3]
припущення, що буде 3 елементи, а можливо, новіші зрізи даних мають лише 1 або 2 (наприклад, трапляється, що b
таких немає index 8813
)?
iloc
частину