python - 如何在熊猫中同时读取多个csv文件
问题描述
嗨,我试图让用户选择三个文件,然后在用户选择并按下打开后将它们读入程序。我尝试了以下代码,但收到以下错误消息。我希望它在打开后打印出文件名,这在我有代码一次打开一个文件时有效,但我希望它也适用于多个文件,只是不确定它是否可能。
> Exception in Tkinter callback Traceback (most recent call last):
> File "C:\Users\John\anaconda3\lib\tkinter\__init__.py", line 1883, in
> __call__
> return self.func(*args) File "<ipython-input-7-0367338b5787>", line 24, in file_opener
> read_file = pd.read_csv (filename, "r","w",error_bad_lines=False, engine="python") File
> "C:\Users\John\anaconda3\lib\site-packages\pandas\io\parsers.py", line
> 676, in parser_f
> return _read(filepath_or_buffer, kwds) File "C:\Users\John\anaconda3\lib\site-packages\pandas\io\parsers.py", line
> 430, in _read
> fp_or_buf, _, compression, should_close = get_filepath_or_buffer( File "C:\Users\John\anaconda3\lib\site-packages\pandas\io\common.py",
> line 200, in get_filepath_or_buffer
> raise ValueError(msg) ValueError: Invalid file path or buffer object type: <class 'tuple'>
我的代码如下。
import pandas as pd
import tkinter as tk
import csv
import json
import numpy as np
import re
import matplotlib.pyplot as plt
import fileinput
from tkinter import filedialog
from tkinter import messagebox
from tkinter import Menu
root = tk.Tk()
root.title("Data Tools 101")
root.geometry("650x700")
def file_opener():
global read_file
filename = filedialog.askopenfilenames(initialdir = "/", title = "Open files", multiple=True)
read_file = pd.read_csv (filename, "r","w",error_bad_lines=False, engine="python")
df = pd.read_csv('Inspections.csv')
print(filename)
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label='Open File',command = file_opener)
filemenu.add_separator()
menubar.add_cascade(label='File', menu=filemenu)
root.config(menu=menubar)
root.mainloop()
解决方案
tkinter.filedialog.askopenfilenames的文档非常薄,但考虑到它可以让您选择多个文件,最好选择返回是某种集合。果然,如果你移到失败的行print(filename)
之上,它表明 a tuple
of filenames 被返回。因此,遍历这些名称以创建数据框。
import json
import numpy as np
import re
import matplotlib.pyplot as plt
import fileinput
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from tkinter import Menu
import pandas as pd
root = tk.Tk()
root.title("Data Tools 101")
root.geometry("650x700")
def file_opener():
global read_file
filenames = filedialog.askopenfilenames(initialdir = "/", title = "Open files", multiple=True)
dfs = []
for filename in filenames:
print("opening", filename)
dfs.append(pd.read_csv (filename, error_bad_lines=False, engine="python"))
print(dfs[-1])
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label='Open File',command = file_opener)
filemenu.add_separator()
menubar.add_cascade(label='File', menu=filemenu)
推荐阅读
- python - 如何替换 NumPy 数组中的单行
- javascript - 制作一个脚本以从 Mongo shell 创建 MongoDB 集合?
- python - Python http.client - request 和 putrequest 有什么区别?
- sql - 如何根据另一列的分位数将新列插入具有标签 '1'/'2'/'3'/'4' # 的数据库中?
- neo4j - 如何在 Neo4j 中解析 json 并使用 foreach 创建节点?
- php - 获取数据库中的数据并合并重复数据
- c++ - 这样做的正确方法是什么?调用指针到指针到指针中的函数?
- kubernetes - 没有为版本“cronjobber.hidde.co/v1alpha1”注册任何类型的“TZCronJob”
- jestjs - 在不同的测试之间模拟相同的值
- node.js - 在我的nestjs模块中导入另一个模块的存储库