#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]}]