Скажем, у меня есть словарь с 10 парами ключ-значение. Каждая запись содержит массив numpy. Однако длина массива не у всех одинакова.
Как я могу создать фрейм данных, в котором каждый столбец содержит отдельную запись?
Когда я пытаюсь:
pd.DataFrame(my_dict)
Я получил:
ValueError: arrays must all be the same length
Любой способ преодолеть это? Я рад, что Pandas использует NaN
эти столбцы для более коротких записей.
pd.Series(...)
(при условии, чтоimport pandas as pd
в разделе импорта)pd.DataFrame({k: pd.Series(l) for k, l in d.items()})
Вот простой способ сделать это:
источник
columns
но это уже значение по умолчанию. См. Документацию по pandas - pandas.DataFrame.from_dictНиже приведен способ привести в порядок ваш синтаксис, но по-прежнему делать то же самое, что и эти другие ответы:
Аналогичный синтаксис существует и для списков:
Другой синтаксис для списков:
Вам может дополнительно потребоваться транспонировать результат и / или изменить типы данных столбца (с плавающей запятой, целое число и т. Д.).
источник
Хотя это не дает прямого ответа на вопрос ОП. Я обнаружил, что это отличное решение для моего случая, когда у меня были неравные массивы, и я хотел бы поделиться:
из документации pandas
источник
Вы также можете использовать
pd.concat
вместеaxis=1
со спискомpd.Series
объектов:источник
Обе следующие строки работают отлично:
Но с% timeit на Jupyter у меня есть 4-кратное соотношение скорости для B и A, что весьма впечатляет, особенно при работе с огромным набором данных (в основном с большим количеством столбцов / функций).
источник
Если вы не хотите, чтобы он отображался,
NaN
и у вас есть две определенные длины, добавление «пробела» в каждую оставшуюся ячейку также будет работать.Если у вас более двух длин записей, рекомендуется создать функцию, которая использует аналогичный метод.
источник
pd.DataFrame ([my_dict]) подойдет!
источник