Похоже, встроенные возможности работают только для сбалансированных словарей.
DataFrame.from_dict
можно использовать с нечетными словарями, установив orient='index'
:
pd.DataFrame.from_dict(d, orient='index')
# 0 1 2 3
# key1 value1 value2 None None
# key2 value1 value2 value3 None
# key3 value1 value2 value3 value4
Чтобы получить транспонированную версию, свяжите .T
:
pd.DataFrame.from_dict(d, orient='index').T
# key1 key2 key3
# 0 value1 value1 value1
# 1 value2 value2 value2
# 2 None value3 value3
# 3 None None value4
To get a long-form version without nulls, melt
the transposed version into id
and value
columns and dropna
only on value
:
(pd.DataFrame.from_dict(d, orient='index').T
.melt(var_name='id', value_name='value')
.dropna(subset=['value']))
# id value
# 0 key1 value1
# 1 key1 value2
# 4 key2 value1
# 5 key2 value2
# 6 key2 value3
# 8 key3 value1
# 9 key3 value2
# 10 key3 value3
# 11 key3 value4
Спасибо. Есть ли способ превратить это в «несбалансированную» панель (чтобы избавиться от НС)? Например, столбец «ID» должен быть «ключом» и столбцами значений со значениями ключей?
пожалуйста. вы можете
melt
транспонировать версию, чтобы получить полную версию со столбцами ключ/значение (ответ обновлен)