使用 Tkinter GUI 中的 read_csv 打开和读取 csv 文件

新手上路,请多包涵
from tkinter import filedialog, Label, Button, Entry, StringVar
from tkinter.filedialog import askopenfile
import pandas as pd

root = tk.Tk()
Label(root, text='File Path').grid(row=0, column=0)
v = StringVar()
entry = Entry(root, textvariable=v).grid(row=0, column=1)
Button(root, text='Browse Data Set',command=lambda:   v.set(askopenfile())).grid(row=1, column=0)
Button(root, text='Close',command=root.quit()).grid(row=1, column=1)
root.file = v.get()
df = pd.read_csv(root.file)
root.mainloop()

我想点击一个按钮打开一个数据集(CSV 文件)并使用 pd.read_csv() 函数读取它,我遇到了一些错误

Traceback (most recent call last):
  File "/home/abishek/PycharmProjects/untitled1/temp.py", line 21, in <module>
    df = pd.read_csv(root.file)
  File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 498, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 275, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 590, in __init__
    self._make_engine(self.engine)
  File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 731, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
  File "/usr/lib/python3/dist-packages/pandas/io/parsers.py", line 1103, in __init__
    self._reader = _parser.TextReader(src, **kwds)
  File "pandas/parser.pyx", line 353, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:3246)
  File "pandas/parser.pyx", line 591, in pandas.parser.TextReader._setup_parser_source (pandas/parser.c:6111)
OSError: File b'' does not exist

Process finished with exit code 1

请帮我解决这个问题,我是 Tkinter 的新手

我已经完成了第一部分,现在我遇到了另一个问题

1.我浏览了一个文件 2.我将使用 list(df) 获取数据框的列,我希望它显示在选项菜单中,我正在使用以下代码进行操作

import tkinter as tk
from tkinter.filedialog import askopenfilename
import pandas as pd

root = tk.Tk()
v = tk.StringVar(root)
v1 = tk.StringVar(root)
v2 = tk.StringVar(root)
v3 = tk.StringVar(root)
df = pd.DataFrame()
col = []
ss = ['a','b','c','d','e']

def get_data_frame():
    global v
    global df
    global col
    file_name = askopenfilename()
    v.set(file_name)
    df = pd.read_csv(file_name)
    col = list(df)
    print(col)

def fill():
    return list(df)

tk.Label(root, text='File Path').grid(row=0, column=0)
entry = tk.Entry(root, textvariable=v).grid(row=0, column=1)
tk.Button(root, text='Browse Data Set', command=get_data_frame).grid(row=0, column=3)
tk.Label(root, text='Class LabelAttribute').grid(row=1, column=0)
tk.OptionMenu(root,v1,*col).grid(row=1, column=1)
v1.set('Nil')
tk.Label(root, text='Row Counter Attribute').grid(row=2, column=0)
v2.set('Nil')
tk.OptionMenu(root,v2,*col).grid(row=2, column=1)
tk.Button(root, text='Close', command=root.destroy).grid(row=5, column=3)
tk.Entry(root, textvariable=v3).grid(row=6, column=0)
tk.Button(root, text='Setter', command=lambda: v3.set(type(col[0]))).grid(row=6, column=1)
v3.set(col)
root.mainloop()
print(col)

但是 python 给出了以下错误

Traceback (most recent call last):
  File "/home/abishek/PycharmProjects/untitled1/GUI.py", line 34, in <module>
    tk.OptionMenu(root,v1,*col).grid(row=1, column=1)
TypeError: __init__() missing 1 required positional argument: 'value'

原文由 Abishek Kumaresan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

正如@Kevin 所建议的,您需要将一些功能放入按下按钮时调用的函数中。我提供了一个例子(我没有安装 pandas,所以 pandas 部分被注释掉了)。您还应该使用 askopenfilename 而不是 askopenfile。我还修复了您的关闭按钮,请注意我已将其更改为 root.destroy 并且我没有将 () 放在末尾。

 import tkinter as tk
from tkinter.filedialog import askopenfilename
#import pandas as pd

def import_csv_data():
    global v
    csv_file_path = askopenfilename()
    print(csv_file_path)
    v.set(csv_file_path)
    #df = pd.read_csv(csv_file_path)

root = tk.Tk()
tk.Label(root, text='File Path').grid(row=0, column=0)
v = tk.StringVar()
entry = tk.Entry(root, textvariable=v).grid(row=0, column=1)
tk.Button(root, text='Browse Data Set',command=import_csv_data).grid(row=1, column=0)
tk.Button(root, text='Close',command=root.destroy).grid(row=1, column=1)
root.mainloop()

原文由 scotty3785 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需在 df = pd.read_csv(csv_file_path) print(df.head()) 之后,在同一函数的下一行中包含 --- ,您就会得到答案。

原文由 Rishi S 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题