Как разделить столбец панд типа dict на столбцы? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть датафрейм для панд.Один из столбцов информационного кадра - это объект dict.Следующий фрейм данных является игрушечным примером реального фрейма данных:

 DF = pd.DataFrame({'id':[1,2,3], 'col1':[{'a':1, 'b':2, 'c':3}, {'a':3, 'b':4, 'c':5}, {'a':None, 'b':5, 'c':6}]})

Я хотел бы разбить col1 на столбцы: один столбец на ключ словаря.Все строки имеют одинаковые ключи.

После разделения кадр данных должен выглядеть следующим образом:

id  a   b    c
1    1  2    3
2   3   4    5
3  None  5   6

ПРИМЕЧАНИЕ : я получил столбец dict из столбца jsonb в postgresql.

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Попробуйте:

df=pd.DataFrame(DF['col1'].tolist())
df['id']=DF['id']

Тогда сейчас:

print(df)

IS:

     a  b  c  id
0  1.0  2  3   1
1  3.0  4  5   2
2  NaN  5  6   3

Do:

df=pd.DataFrame(DF['col1'].tolist())
df.insert(0,'id',DF['id'])
print(df)

Для нанесения'id' спереди

Вывод:

   id    a  b  c
0   1  1.0  2  3
1   2  3.0  4  5
2   3  NaN  5  6
0 голосов
/ 28 сентября 2018

Вход:

df = pd.DataFrame({'id':[1,2,3], 'col1':[{'a':1, 'b':2, 'c':3}, {'a':3, 'b':4, 'c':5}, {'a':None, 'b':5, 'c':6}]})
df.set_index('id').col1.apply(pd.Series)

Выход:

      a    b    c
id
1   1.0  2.0  3.0
2   3.0  4.0  5.0
3   NaN  5.0  6.0
0 голосов
/ 28 сентября 2018

Я думаю, вам нужно:

df = pd.concat([DF.drop(['col1'], axis=1), DF['col1'].apply(pd.Series)], axis=1)

вывод

    id  a     b     c
0   1   1.0   2.0   3.0
1   2   3.0   4.0   5.0
2   3   NaN   5.0   6.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...