У меня есть список словарей, как это:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
И я хочу превратить это в панд, DataFrame
как это:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Примечание: порядок столбцов не имеет значения.
Как я могу превратить список словарей в pandas DataFrame, как показано выше?
python
dictionary
pandas
dataframe
appleLover
источник
источник
df = df.set_index('time')
потомpandas.DataFrame
'{"":{"...
вы используете подход json_normalize, см. Подробный ответ @ cs95Другие ответы верны, но мало что было объяснено с точки зрения преимуществ и ограничений этих методов. Целью этого поста будет показать примеры этих методов в различных ситуациях, обсудить, когда использовать (а когда не использовать), и предложить альтернативы.
DataFrame()
,DataFrame.from_records()
И.from_dict()
В зависимости от структуры и формата ваших данных, существуют ситуации, когда либо все три метода работают, либо одни работают лучше других, либо некоторые не работают вообще.
Рассмотрим очень надуманный пример.
Этот список состоит из «записей» с каждым присутствующим ключом. Это самый простой случай, с которым вы могли столкнуться.
Слово на словарь ориентации:
orient='index'
/'columns'
Прежде чем продолжить, важно провести различие между различными типами ориентации словаря и поддержкой с пандами. Существует два основных типа: «столбцы» и «индекс».
orient='columns'
Словари с ориентацией «столбцы» будут иметь ключи, соответствующие столбцам в эквивалентном кадре данных.
Например,
data
выше находится в «столбцах» Востока.Примечание. Если вы используете
pd.DataFrame.from_records
, предполагается, что ориентация является «столбцами» (вы не можете указать иначе), и словари будут загружены соответствующим образом.orient='index'
С этим ориентиром предполагается, что ключи соответствуют значениям индекса. Этот тип данных лучше всего подходит для
pd.DataFrame.from_dict
.Этот случай не рассматривается в ОП, но все же полезно знать.
Настройка пользовательского индекса
Если вам нужен пользовательский индекс для результирующего DataFrame, вы можете установить его, используя
index=...
аргумент.Это не поддерживается
pd.DataFrame.from_dict
.Работа с отсутствующими ключами / столбцами
Все методы работают "из коробки" при обработке словарей с отсутствующими значениями ключей / столбцов. Например,
Чтение подмножества столбцов
«Что делать, если я не хочу читать в каждом столбце»? Вы можете легко указать это, используя
columns=...
параметр.Например, из приведенного выше примера словаря
data2
, если вы хотите читать только столбцы «A», «D» и «F», вы можете сделать это, передав список:Это не поддерживается
pd.DataFrame.from_dict
с восточными "столбцами" по умолчанию.Чтение Подмножества Строк
Не поддерживается ни одним из этих методов напрямую . Вам придется перебирать свои данные и выполнять обратное удаление на месте во время итерации. Например, чтобы извлечь только 0- ю и 2- ю строки
data2
сверху, вы можете использовать:Панацея:
json_normalize
для вложенных данныхСильной, надежной альтернативой описанным выше методам является
json_normalize
функция, которая работает со списками словарей (записей), а также может также обрабатывать вложенные словари.Опять же, имейте в виду, что передаваемые данные
json_normalize
должны быть в формате списка словарей (записей).Как уже упоминалось,
json_normalize
также можно обрабатывать вложенные словари. Вот пример, взятый из документации.Для получения более подробной информации о
meta
иrecord_path
аргументах, проверьте документацию.Подведение итогов
Вот таблица всех методов, обсужденных выше, вместе с поддерживаемыми функциями / функциональностью.
* Используйте,
orient='columns'
а затем транспонировать, чтобы получить тот же эффект, что иorient='index'
.источник
В Пандах 16.2 я должен был сделать
pd.DataFrame.from_records(d)
это, чтобы это сработало.источник
deque
0.17.1
с помощью решения @joris0.18.1
, нужно использовать,from_records
если не все словари имеют одинаковые ключи.Вы также можете использовать
pd.DataFrame.from_dict(d)
как:источник
dict
сек, а не из одного ,dict
как вы предположить , в своем ответе.Я знаю, что несколько человек столкнутся с этим и не найдут здесь ничего полезного. Я нашел самый простой способ сделать это так:
Надеюсь, это поможет кому-то!
источник
и простой вызов:
источник
источник
Для преобразования списка словарей в DataFrame для панд вы можете использовать «append»:
У нас есть словарь называется
dic
и DIC имеет 30 элементов списка (list1
,list2
...,list30
)total_df
)total_df
сlist1
total_df
источник
DataFrame()
,DataFrame.from_records()
и.from_dict()
?