У меня есть словарь Python, как следующий:
{u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
u'2012-06-13': 389,
u'2012-06-14': 389,
u'2012-06-15': 389,
u'2012-06-16': 389,
u'2012-06-17': 389,
u'2012-06-18': 390,
u'2012-06-19': 390,
u'2012-06-20': 390,
u'2012-06-21': 390,
u'2012-06-22': 390,
u'2012-06-23': 390,
u'2012-06-24': 390,
u'2012-06-25': 391,
u'2012-06-26': 391,
u'2012-06-27': 391,
u'2012-06-28': 391,
u'2012-06-29': 391,
u'2012-06-30': 391,
u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
Ключи - это даты Unicode, а значения - целые числа. Я хотел бы преобразовать это в pandas dataframe, указав даты и соответствующие им значения в виде двух отдельных столбцов. Пример: col1: даты col2: DateValue (даты по-прежнему Unicode, а значения дат по-прежнему целые)
Date DateValue
0 2012-07-01 391
1 2012-07-02 392
2 2012-07-03 392
. 2012-07-04 392
. ... ...
. ... ...
Любая помощь в этом направлении будет высоко ценится. Я не могу найти ресурсы в документах панд, чтобы помочь мне с этим.
Я знаю, что одним из решений может быть преобразование каждой пары ключ-значение в этом диктанте в диктовку, чтобы вся структура превратилась в диктат, а затем мы можем добавить каждую строку отдельно к кадру данных. Но я хочу знать, есть ли более простой и прямой способ сделать это.
До сих пор я пытался преобразовать dict в объект серии, но, похоже, это не поддерживает связь между столбцами:
s = Series(my_dict,index=my_dict.keys())
Ответы:
Ошибка здесь заключается в вызове конструктора DataFrame со скалярными значениями (где он ожидает, что значения будут списком / dict / ... т.е. имеют несколько столбцов):
Вы можете взять элементы из словаря (то есть пары ключ-значение):
Но я думаю, что имеет смысл передать конструктор Series:
источник
from_dict
имеют ориентированный kwarg, поэтому я мог бы использовать его, если бы хотел избежать транспонирования. Есть несколько вариантов сfrom_dict
, под капотом это не очень отличается от использования конструктора DataFrame.pandas.core.common.PandasError: DataFrame constructor not properly called!
из первого примераПри преобразовании словаря в фрейм данных pandas, в котором вы хотите, чтобы ключи были столбцами указанного фрейма данных, а значения были значениями строк, вы можете просто заключить скобки в словарь следующим образом:
Это избавило меня от головной боли, поэтому я надеюсь, что это поможет кому-то там!
РЕДАКТИРОВАТЬ: В документах
data
Pandas один параметр для параметра в конструкторе DataFrame представляет собой список словарей. Здесь мы передаем список с одним словарем.источник
Как объясняется в другом ответе, использование
pandas.DataFrame()
здесь не будет действовать так, как вы думаете.Что вы можете сделать, это использовать
pandas.DataFrame.from_dict
сorient='index'
:источник
rename
метода, чтобы также установить имена индекса и столбцов за один раз?Передайте элементы словаря в конструктор DataFrame и дайте имена столбцов. После этого проанализируйте
Date
столбец, чтобы получитьTimestamp
значения.Обратите внимание на разницу между Python 2.x и 3.x:
В Python 2.x:
В Python 3.x: (требуется дополнительный «список»)
источник
PandasError: DataFrame constructor not properly called!
df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
в частности, я нашел полезными примеры, ориентированные на строки; так как часто то, как записи хранятся внешне.
https://pbpython.com/pandas-list-dict.html
источник
Панды имеют встроенную функцию для преобразования dict в фрейм данных.
Для ваших данных вы можете преобразовать его, как показано ниже:
источник
источник
Вы также можете просто передать ключи и значения словаря в новый фрейм данных, например так:
источник
В моем случае я хотел, чтобы ключи и значения dict были столбцами и значениями DataFrame. Так что единственное, что сработало для меня, было:
источник
Это то, что сработало для меня, так как я хотел иметь отдельный столбец индекса
источник
Принимает dict в качестве аргумента и возвращает фрейм данных с ключами dict в качестве индекса и значениями в виде столбца.
источник
Вот как это работает для меня:
надеюсь, это поможет
источник
Если вы не инкапсулируете
yourDict.keys()
внутриlist()
, то в конечном итоге все ваши ключи и значения будут размещены в каждой строке каждого столбца. Как это:Date \ 0 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
1 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
2 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
3 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
4 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
Но, добавив,
list()
результат выглядит так:Date Date_Values 0 2012-06-08 388 1 2012-06-09 388 2 2012-06-10 388 3 2012-06-11 389 4 2012-06-12 389 ...
источник
Я сталкивался с этим несколько раз и у меня есть пример словаря, который я создал из функции
get_max_Path()
, и он возвращает пример словаря:{2: 0.3097502930247044, 3: 0.4413177909384636, 4: 0.5197224051562838, 5: 0.5717654946470984, 6: 0.6063959031223476, 7: 0.6365209824708223, 8: 0.655918861281035, 9: 0.680844386645206}
Чтобы преобразовать это в массив данных, я запустил следующее:
df = pd.DataFrame.from_dict(get_max_path(2), orient = 'index').reset_index()
Возвращает простой двухколонный фрейм данных с отдельным индексом:
index 0 0 2 0.309750 1 3 0.441318
Просто переименуйте столбцы, используя
f.rename(columns={'index': 'Column1', 0: 'Column2'}, inplace=True)
источник
Я думаю, что вы можете внести некоторые изменения в свой формат данных при создании словаря, тогда вы можете легко преобразовать его в DataFrame:
вход:
вывод:
вход:
вывод: будет ваш DataFrame
Вам просто нужно использовать текстовое редактирование где-нибудь, например, в Sublime или Excel.
источник