Construct Pandas DataFrame из словаря в форме {index: список значений строк}
Мне удалось это сделать, используя:
dft = pd.DataFrame.from_dict({
0: [50, 45, 00, 00],
1: [53, 48, 00, 00],
2: [56, 53, 00, 00],
3: [54, 49, 00, 00],
4: [53, 48, 00, 00],
5: [50, 45, 00, 00]
}, orient='index'
)
Сделано так, что конструктор выглядит так же, как DataFrame, что упрощает чтение/редактирование:
>>> dft
0 1 2 3
0 50 45 0 0
1 53 48 0 0
2 56 53 0 0
3 54 49 0 0
4 53 48 0 0
5 50 45 0 0
Но конструктор DataFrame.from_dict не имеет параметра столбцов, поэтому предоставление столбцам разумных имен делает дополнительный шаг:
dft.columns = ['A', 'B', 'C', 'D']
Это кажется неуклюжим для такого удобного (например, для модульных тестов) способов инициализации DataFrames.
Итак, мне интересно: есть ли лучший способ?
Ответы
Ответ 1
В качестве альтернативы вы можете использовать DataFrame.from_items()
для создания DataFrame из вашего словаря; это позволяет одновременно передавать имена столбцов.
Например, если d
- ваш словарь:
d = {0: [50, 45, 0, 0],
1: [53, 48, 0, 0],
2: [56, 53, 0, 0],
3: [54, 49, 0, 0],
4: [53, 48, 0, 0],
5: [50, 45, 0, 0]}
Данные d.items()
, а ориентация снова 'index'
. Клавиши словаря становятся значениями индекса:
>>> pd.DataFrame.from_items(d.items(),
orient='index',
columns=['A','B','C','D'])
A B C D
0 50 45 0 0
1 53 48 0 0
2 56 53 0 0
3 54 49 0 0
4 53 48 0 0
5 50 45 0 0
В Python 2 вы можете использовать d.iteritems()
, чтобы получить содержимое словаря, чтобы избежать создания другого списка в памяти.
Ответ 2
Один из способов сделать это:
df = pd.DataFrame.from_dict({
0: {"A":50, "B":40},
1: {"A":51, "B":30}}, orient='index')
Однако для быстрой инициализации теста я предпочел бы ваш путь +, а затем установил столбцы.
Ответ 3
Вы можете попробовать:
x=pd.DataFrame({0:[50,45],1:[53,48],2:[56,53]}, index=["A","B"]).transpose()
Но это все еще странно, поскольку вы указываете стандартный индекс как ключи для своего словаря.
Почему не напрямую
x = pd.DataFrame({"A":[50,53,56],"B":...})