Загрузите фрейм данных из массива json по порядку

Предположим, у меня есть следующий массив на 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 27.12.2018 04:26

@ n1tk обновлен выходным примером.

user10332687 27.12.2018 04:31
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
431
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Немного хакерский, но

pd.concat([pd.DataFrame(d_) for d_ in d], axis=1)

Работа?

(при условии

d = your_list

)

это работает, спасибо. Не могли бы вы объяснить, что делает axis=1?

user10332687 27.12.2018 04:29

Конечно! 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/…)

hchw 27.12.2018 04:32
Ответ принят как подходящий

Вы можете создать единый словарь, а затем передать его в 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 или?

user10332687 27.12.2018 04:42

Спасибо, я неправильно понял ваш вопрос. Тем не менее вы думали о переупорядочивание столбцов?

Darius 27.12.2018 04:51

Я выполнил пример.

Darius 27.12.2018 05:00

Другие вопросы по теме