Python Pandastable将新列添加到现有数据帧
我试图在脚本中使用Python Pandastable将新列添加到现有数据帧,python,pandas,tkinter,Python,Pandas,Tkinter,我试图在脚本中使用pandastable库。基本上,下面的脚本将用户选择的.csv导入到pandastable中,并在tkinterGUI上正确显示 一旦导入,我想添加列。我认为使用这个文档及其列出的表方法很容易做到这一点。例如:table.autoAddColumns(1)添加单个列,但是无论我如何尝试使用它,我都无法让它工作 import csv import tkinter as tk import tkinter.ttk as tkrttk from tkinter import * f
pandastable
库。基本上,下面的脚本将用户选择的.csv
导入到pandastable
中,并在tkinter
GUI上正确显示
一旦导入,我想添加列。我认为使用这个文档及其列出的表方法很容易做到这一点。例如:table.autoAddColumns(1)
添加单个列,但是无论我如何尝试使用它,我都无法让它工作
import csv
import tkinter as tk
import tkinter.ttk as tkrttk
from tkinter import *
from tkinter import filedialog
import pandas as pd
from pandastable import Table, TableModel
from PIL import Image, ImageFont, ImageTk
root = tk.Tk()
root.geometry("2000x1000")
root.title('Workshop Manager')
style = tkrttk.Style()
style.configure("Treeview.Heading", foreground='Red', font=('Helvetica', 10))
def select_input_file():
global input_file_path
input_file_path = filedialog.askopenfilename(
filetypes=(("CSV files", "*.csv"),))
app = TestApp(root, input_file_path)
app.place(bordermode = INSIDE,height = 500, width = 2000, x =0, y=50)
class TestApp(tk.Frame):
def __init__(self, parent, input_file_path):
super().__init__(parent)
self.table = Table(self, showtoolbar=False, showstatusbar=False)
self.table.importCSV(input_file_path)
self.table.show(input_file_path)
##Breaks here##
self.table.autoAddColumns(1)
root.mainloop()
我尝试过使用table.autoAddColumns(1)
。这也不管用
如果我使用self.table.autoAddColumns(1)
我会得到错误AttributeError:“TableModel”对象没有属性“auto\u AddColumns”
如果我使用
table.autoAddColumns(1)
我会得到错误name错误:没有定义名称“table”
这是pandastable
中的一个错误
但是,您可以使用
addColumn()
函数代替。无参数调用时,将显示一个对话框,选择dtype
并输入新列的名称。这是pandastable
中的一个错误。啊,谢谢您提供的信息。也许最好放弃pandastable库,继续使用pandas。您可以使用addColumn()
函数,但它也有一个bug,可以通过修补模块源代码轻松修复。再次感谢您提供的信息,我以前从未修补过模块,您能为我指出正确的方向吗。。cheers将pandatable
模块的core.py
中的行def addColumn(self,newname=None)
更改为def addColumn(self,newname='None',dtype='object')
。请注意,如果您升级该模块并且该模块仅在Python环境中工作,那么它将被覆盖。或者您可以只调用self.table.addColumn()
,而不传递任何参数,然后将要求您选择dtype
并输入新列的名称。在这种情况下,不需要修补源代码。