TypeError:字节索引必须是整数或切片,而不是str-Python错误

时间:2019-09-11 18:55:07

标签: python python-3.x

我正在尝试从数据集中获取一列并将其设置为变量。数据集有多列,但我需要的是“ ID”列。

如果您在下面查看我的代码,将会看到我正在使用tkinter创建一个应用程序,并要求用户上传数据集(其中将包含“ ID”列)。然后,代码将读取文件并提取“ ID”列。给我错误的行是:

ids = int(data['ID'])

该错误告诉我序列(或列)必须全部为整数值,而不是字符串,这就是为什么我使用'int()'函数的原因,但它仍然给我这个错误:

TypeError: byte indices must be integers or slices, not str

这是我的代码:

import tkinter as tk
import delete as dl
import pandas as pd

root= tk.Tk() 

canvas1 = tk.Canvas(root, width = 300, height = 300) 
canvas1.pack()


from tkinter import filedialog
file = filedialog.askopenfile(parent=root,mode='rb',title='Choose a file')
if file != None:
    data = file.read()
    ids = int(data['ID'])
    file.close()

2 个答案:

答案 0 :(得分:0)

如果data['ID']是具有data键的字典,则调用'ID'将返回一些内容,但是data = file.read()返回一个字符串(或字节)对象。

数据集上载为什么格式?如果它是文本/ csv文件,则可以使用csv.DictReader(更多信息请访问https://docs.python.org/3.7/library/csv.html)。

答案 1 :(得分:0)

@ahanson赚了钱。

我不确定'.read()'的工作方式,但是似乎可以将文件作为字节对象打开。相反,我使用pd.read_excel()进行了切换,并且可以正常工作。

有效的新代码:

import tkinter as tk
import delete as dl
import pandas as pd

root= tk.Tk() 

canvas1 = tk.Canvas(root, width = 300, height = 300) 
canvas1.pack()


from tkinter import filedialog
file = filedialog.askopenfile(parent=root,mode='rb',title='Choose a file')
if file != None:
    data = pandas.read_excel(file)
    ids = data['ID']