1

我正在尝试处理以下代码

ds = load_csv('C:\\User.csv')
f = open(ds,'r')
lines = f.readlines()[1:]
print(lines)
f.close()

数据集的第一行是字符串。我收到以下错误

TypeError: expected str, bytes or os.PathLike object, not list

虽然当我尝试使用以下代码打开文件时它可以工作

filename='C:\\User.csv'
f = open(filename,'r')
lines = f.readlines()[1:]
print(lines)
f.close()

我忽略了第一行,因为它的字符串和数据集的其余部分是浮动的。

更新:

加载_csv

def load_csv(ds):
    dataset = list()
    with open(ds, 'r') as file:
        csv_reader = reader(file)
        for row in csv_reader:
            if not row:
                continue
            dataset.append(row)
            return dataset

即使我使用这种方式仍然会得到错误

ds = load_csv('C:\\Users.csv')
minmax = dataset_minmax(ds)
normalize_dataset(ds, minmax)

def dataset_minmax(dataset):
    minmax = list()
    for i in range(len(dataset[0])):
        col_values = [row[i] for row in dataset]
        value_min = min(col_values)
        value_max = max(col_values)
        minmax.append([value_min, value_max])
    return minmax

def normalize_dataset(dataset, minmax):
    for row in dataset:
        for i in range(len(row)):
            row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0])

它给出了以下错误

row[i] = (row[i] - minmax[i][0]) / (minmax[i][1] - minmax[i][0])

错误:

TypeError: unsupported operand type(s) for -: 'str' and 'str'
4

3 回答 3

0

由于您现在遇到了不同的错误,因此我将给出第二个答案。

此错误意味着减法中的两个变量是字符串,而不是数字。

In [1]: 5 - 3
Out[1]: 2

In [2]: '5' - '3'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-4ef7506473f1> in <module>
----> 1 '5' - '3'

TypeError: unsupported operand type(s) for -: 'str' and 'str'

这是因为 CSV 阅读器假定一切都是字符串。您需要将其转换为浮点数,例如,通过更改load_csv为执行类似操作dataset.append(list(map(float, row)))而不是现有的 append 语句。

min-max 的东西不会失败,因为 Python 的 min 和 max 也适用于字符串:

In [3]: min('f', 'o', 'o', 'b', 'a', 'r')
Out[3]: 'a'

但是,它可能会给您错误的答案:

In [4]: min('2.0', '10.0')
Out[4]: '10.0'

顺便说一句,如果你在这些方面做了很多事情,你可能会从使用Pandas包而不是自己滚动包中受益。

于 2019-03-30T18:44:24.467 回答
-1

我猜错误出open在代码中的命令中。失败的原因是该open命令需要一个string类似操作系统路径的对象,该对象是它可以打开的文件的句柄(就像它在错误中所说的那样)。该函数load_csv可能返回一个列表,该列表的格式不兼容open

于 2019-03-30T17:53:03.673 回答
-1

看看你的前两行它不起作用:

ds = load_csv('C:\\User.csv')
f = open(ds,'r')

ds是一个包含数据的对象(来自 TensorFlow,我假设?)。然后像打开文件名一样打开它。这就是口译员抱怨的原因。ds是数据集,而不是代表文件的字符串。

它适用于另一个示例,因为您使用文件名。

于 2019-03-30T17:53:37.570 回答