使用python解析CSV文件(稍后制作决策树)

Mar*_*ret 5 python csv decision-tree

首先,完全披露:这是一个 uni 分配,所以我不想收到代码。:)。我更在寻找方法;我对 python陌生,读过一本书但还没有写任何代码。

整个任务是导入 CSV 文件的内容,根据 CSV 文件的内容创建决策树(使用ID3 算法),然后解析第二个 CSV 文件以针对该树运行。有一个很大的(可以理解的)偏好让它能够处理不同的 CSV 文件(我问我们是否被允许对列名进行硬编码,主要是为了消除它的可能性,答案是否定的)。

CSV 文件采用相当标准的格式;标题行用# 标记,然后显示列名,之后的每一行都是一系列简单的值。例子:

# Column1, Column2, Column3, Column4
Value01, Value02, Value03, Value04
Value11, Value12, Value13, Value14
Run Code Online (Sandbox Code Playgroud)

目前,我正在尝试解决第一部分:解析 CSV。要为决策树做出决策,字典结构似乎是最合乎逻辑的;所以我想沿着这些方向做一些事情:

Read in each line, character by character
If the character is not a comma or a space
    Append character to temporary string
If the character is a comma
    Append the temporary string to a list
    Empty string
Once a line has been read
    Create a dictionary using the header row as the key (somehow!)
    Append that dictionary to a list
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,我不确定如何在键和值之间进行映射。我还想知道是否有某种方法可以对列表中的每个字典执行操作,因为我需要做的事情是“每个人都返回列 Column1 和 Column4 的值,所以我可以向上计数谁有什么!” - 我假设有某种机制,但我认为我不知道该怎么做。

字典是最好的方法吗?使用其他数据结构做事会更好吗?如果是这样,是什么?

Mic*_*yan 4

Python 内置了一些非常强大的语言结构。您可以从文件中读取行,例如:

以 open(name_of_file,"r") 作为文件:
    对于文件中的行:
         # 处理该行

您可以使用string.split函数沿逗号分隔行,并且可以使用string.strip消除中间的空格。Python 有非常强大的列表字典

要创建列表,只需使用空括号(如 []),而要创建空字典,则使用 {}:

我的列表 = []; # 创建一个空列表
mydict = {}; # 创建一个空字典

您可以使用 .append() 函数插入到列表中,同时可以使用索引下标插入到字典中。例如,您可以使用mylist.append(5)将 5 添加到列表中,同时可以使用mydict[key]=value将键key与值关联起来value。要测试字典中是否存在某个键,可以使用关键字in。例如:

如果键入 mydict:
   打印“现在”
别的:
   打印“缺席”

要迭代列表或字典的内容,您可以简单地使用 for 循环,如下所示:

对于 mylist 中的 val:
    # 用 val 做一些事情

mydict 中的键:
    # 使用 key 或 mydict[key] 执行某些操作

由于在许多情况下,迭代列表时需要同时拥有值和索引,因此还有一个名为 enumerate 的内置函数,可以帮助您省去自己计算索引的麻烦:

对于 idx,枚举(mylist)中的 val:
    # 用 val 或 idx 做一些事情。请注意 val=mylist[idx]

上面的代码在功能上与以下相同:

idx=0
对于 mylist 中的 val:
   # 进程 val, idx
   idx += 1

如果您选择的话,您还可以迭代索引:

对于 xrange(len(mylist)) 中的 idx:
    # 使用 idx 和 mylist[idx] 做一些事情

此外,您还可以使用len获取列表中的元素数量或字典中的键数量。

可以通过使用列表理解对字典或列表的每个元素执行操作;但是,我建议您只需使用 for 循环来完成该任务。但是,举个例子:

>>> 列表1 = 范围(10)
>>> 列表1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list2 = [2*x 表示 list1 中的 x]
>>> 列表2
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

当你有时间的时候,我建议你阅读Python教程来获得一些更深入的知识。