Конвертировать список диктовок в DataFrame - PullRequest
0 голосов
/ 03 мая 2018

У меня список словарей словаря выглядит так:

[{'a': 1, 'b': {'c': 1, 'd': 2, 'e': 3}, 'f': 4}, 
 {'a': 2, 'b': {'c': 2, 'd': 3, 'e': 4}, 'f': 3}, 
 {'a': 3, 'b': {'c': 3, 'd': 4, 'e': 5}, 'f': 2}, 
 {'a': 4, 'b': {'c': 4, 'd': 5, 'e': 6}, 'f': 1 }]

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

     a    c    d    e    f
0    1    1    2    3    4
1    2    2    3    4    3
2    3    3    4    5    2
3    4    4    5    6    1

в то время как значение по умолчанию pd.DataFrame(data) выглядит следующим образом:

     a    b                           f
0    1    {'c': 1, 'd': 2, 'e': 3}    4
1    2    {'c': 2, 'd': 3, 'e': 4}    3
2    3    {'c': 3, 'd': 4, 'e': 5}    2
3    4    {'c': 4, 'd': 5, 'e': 6}    1

Как я могу сделать это с пандами? Спасибо.

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

json_normalize - это то, что вы ищите!

import pandas as pd
from pandas.io.json import json_normalize

x = [{'a': 1, 'b': {'c': 1, 'd': 2, 'e': 3}, 'f': 4}, 
 {'a': 2, 'b': {'c': 2, 'd': 3, 'e': 4}, 'f': 3}, 
 {'a': 3, 'b': {'c': 3, 'd': 4, 'e': 5}, 'f': 2}, 
 {'a': 4, 'b': {'c': 4, 'd': 5, 'e': 6}, 'f': 1 }]

sep = '::::' # string that doesn't appear in column names

frame = json_normalize(x, sep=sep)
frame.columns = frame.columns.str.split(sep).str[-1]
print(frame)

выход

   a  c  d  e  f
0  1  1  2  3  4
1  2  2  3  4  3
2  3  3  4  5  2
3  4  4  5  6  1
0 голосов
/ 03 мая 2018
import pandas as pd
z=[{'a': 1, 'b': {'c': 1, 'd': 2, 'e': 3}, 'f': 4}, 
 {'a': 2, 'b': {'c': 2, 'd': 3, 'e': 4}, 'f': 3}, 
 {'a': 3, 'b': {'c': 3, 'd': 4, 'e': 5}, 'f': 2}, 
 {'a': 4, 'b': {'c': 4, 'd': 5, 'e': 6}, 'f': 1 }]
step1=pd.DataFrame(z)
column_with_sets = 'b'
step2=pd.DataFrame(list(step1[column_with_sets]))
step3=pd.concat([step1[[i for i in step1.columns if column_with_sets 
not in i]], step2],1)
step4=output.reindex_axis(sorted(output.columns), axis=1)
0 голосов
/ 03 мая 2018

вам нужно конвертировать JSON в плоские данные как таковые:

import pandas as pd
from pandas.io.json import json_normalize
data = [{'a': 1, 'b': {'c': 1, 'd': 2, 'e': 3}, 'f': 4}, 
        {'a': 2, 'b': {'c': 2, 'd': 3, 'e': 4}, 'f': 3}, 
        {'a': 3, 'b': {'c': 3, 'd': 4, 'e': 5}, 'f': 2}, 
        {'a': 4, 'b': {'c': 4, 'd': 5, 'e': 6}, 'f': 1 }]

df = pd.DataFrame.from_dict(json_normalize(data), orient='columns')
df

# output:
    a   b.c b.d b.e f
0   1   1   2   3   4
1   2   2   3   4   3
2   3   3   4   5   2
3   4   4   5   6   1

Вы можете переименовать столбцы, как только это будет сделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...