Первым аргументом tree.column () должно быть имя столбца, которому вы присвоили:
tree["columns"]=(df_col)
Проблема в том, что вы назвали столбцы с помощью строки, но вы пытаетесьполучить к ним доступ с помощью целых чисел в:
for x in range(len(df_col)):
tree.column(x, width=100 )
tree.heading(x, text=df_col[x])
Выше вы пытаетесь получить доступ к tree.columns (0) вместо tree.columns ('Company'), отсюда ключевая ошибка.
Вместо этого попробуйте:
for x in range(len(df_col)):
tree.column(df_col[x], width=100)
tree.heading(df_col[x], text=df_col[x])
Обратите внимание, что df_col - это ndarray, а не датафрейм, поэтому df_col [x] работает правильно (df [x] выдаст ошибку ключа).Это потому, что df.columns.values возвращает ndarray.Как примечание, это может быть немного запутанным, чтобы назвать ndarray df_col.
Есть также несколько проблем с вашей вставкой.Второй аргумент должен соответствовать индексу записи, к которой вы хотите обратиться.Тогда одним из решений является использование индекса строки в качестве второго аргумента, за которым следует метка строки как text = "rowLabel", за которой следует список значений для строки:
tree.insert('', i, text=rowLabels[i], values=df.iloc[i,:].tolist())
Где должен быть определен rowLabelsкак то, что вы хотите использовать в первом столбце таблицы.Я бы порекомендовал использовать столбец индекса из таблицы здесь, если это возможно.Это может быть определено с помощью:
rowLabels = df.iloc[:,indexColumn].tolist()
или:
rowLabels = df.index.tolist()
Последнее является жизнеспособным, если df имеет именованные индексы, определенные столбцом во время импорта электронной таблицы.В первом indexColumn - это int, ссылающийся на номер столбца в df, который содержит уникальные идентификаторы.
Параметр values = df.iloc [i,:]. Tolist () преобразует все столбцы i-й строки всписок, и, поскольку мы передали значение индекса (второй аргумент), которое становится больше, вызов будет вставлять новую строку каждый цикл (из записи документов Python tkinter в Treeview -> insert: «если индекс больше чемили равное текущему количеству дочерних элементов, оно вставляется в конце ").
Наконец, я не уверен, что вы не опубликовали конец своего кода, но для того, чтобы дерево показываловверх, вам также нужно будет использовать пакет, сетку и т. д.
tree.pack()
или
tree.grid(row=0, column=0)
Ссылки: https://docs.python.org/3/library/tkinter.ttk.html#tkinter.ttk.Treeview
Этот полезный пример дает несколькоиз шагов ясно: https://knowpapa.com/ttk-treeview/