Предположим, у меня есть следующий массив на Python:
[
{'id': [1,2,3]},
{'name': [4,3,2]},
{'age': [9,0,1]},
]
Как мне загрузить это в фреймворк pandas? Обычно я делаю pd.DataFrame из диктовки, но для меня важно поддерживать порядок столбцов.
Окончательные данные должны выглядеть так:
id name age
1 4 9
2 3 0
3 2 1
@ n1tk обновлен выходным примером.






Немного хакерский, но
pd.concat([pd.DataFrame(d_) for d_ in d], axis=1)
Работа?
(при условии
d = your_list
)
это работает, спасибо. Не могли бы вы объяснить, что делает axis=1?
Конечно! axis=0 используется по умолчанию и будет объединять фреймы данных по вертикали (т.е. если у вас есть два фрейма данных из трех столбцов и трех строк, axis=0 создаст один из трех столбцов и шести строк. axis=1 - наоборот, объединяет их по горизонтали, так что у вас будет 6 столбцов. и 3 строки. Поскольку в этом случае вы создаете 3 новых фрейма данных из 3 строк и 1 столбца, для получения результирующего 3x3 df вам необходимо использовать axis=1. (подробнее здесь: pandas.pydata.org/pandas-docs/version/0.23.4/generated/…)
Вы можете создать единый словарь, а затем передать его в pd.DataFrame. Чтобы гарантировать сохранение порядка столбцов, используйте collections.OrderedDict:
from collections import OrderedDict
L = [{'id': [1,2,3]},
{'name': [4,3,2]},
{'age': [9,0,1]}]
df = pd.DataFrame(OrderedDict([(k, v) for d in L for k, v in d.items()]))
print(df)
id name age
0 1 4 9
1 2 3 0
2 3 2 1
С Python 3.7+ словари заказаны на вставку, поэтому вы можете использовать обычный dict:
df = pd.DataFrame({k: v for d in L for k, v in d.items()})
Или объедините список словарей (источник) и преобразуйте результат в фрейм данных:
merged_data = {}
[merged_data.update(d) for d in original_data]
# or, b/c it's more pythonic:
# list(map(lambda x: merged_data.update(x), original_data))
df = pd.DataFrame.from_dict(merged_data)
df = df[['id', 'name', 'age']]
print(df)
# id name age
# 0 1 4 9
# 1 2 3 0
# 2 3 2 1
По мне так понятнее и читабельнее.
как узнать, что dict сохранит порядок? Это OrderedDict или?
Спасибо, я неправильно понял ваш вопрос. Тем не менее вы думали о переупорядочивание столбцов?
Я выполнил пример.
как вам нужно, чтобы выглядели окончательные данные?