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":...})