Лучший способ преобразования фрейма данных Pandas в список словарей для каждого столбца

#python #pandas #list #dictionary

#python #pandas #Список #словарь

Вопрос:

У меня есть фрейм данных pandas, который не имеет известного размера / формы. Мне нужно преобразовать этот фрейм данных в список словарей с макетом:

 [
{"heading": column1name, "values":[list of column 1 values]},
{"heading": column2name, "values":[list of column 2 values]},
...and so on
]
 

В настоящее время я делаю это, используя цикл for для перебора каждого столбца и добавления словаря в список:

 def sendHeadingsAndValues():
    columns = list(USER_DATA.columns.values)
    dd_columnList = []
    
    for column in columns:
        dd_columnList.append({"heading": column, "values": USER_DATA[column].to_list()})
    
    return dd_columnList
 

Это довольно неэффективно для больших фреймов данных с несколькими столбцами, поэтому мне интересно, есть ли более быстрый способ сделать это?

Буду признателен за любые предложения!

Комментарии:

1. Что в этом неэффективного?

2. Я не уверен, что буду полностью честен. Я читал, что, как правило, плохая идея перебирать строки / столбцы при использовании Pandas, поскольку обычно существует более быстрый «векторизованный» способ выполнения действий, хотя idk, если это применимо здесь?

Ответ №1:

Вы можете использовать pandas.DataFrame.to_dict вместе с пониманием списка.Смотрите ниже:

 import pandas as pd

d=df.to_dict('list')

res=[{'heading':i, 'values':k} for i, k in d.items()]
 

Пример:

 df=pd.DataFrame({'a':[10,20,30,40], 'b':[100,200,300,400]})

>>>print(df)
    a    b
0  10  100
1  20  200
2  30  300
3  40  400

d=df.to_dict('list')
    
res=[{'heading':i, 'values':k} for i, k in d.items()]

>>> print(res)

[{'heading': 'a', 'values': [10, 20, 30, 40]}, {'heading': 'b', 'values': [100, 200, 300, 400]}]