【问题标题】:Accessing 2 columns in a 2D list in python在python中访问二维列表中的2列
【发布时间】:2014-07-11 21:43:12
【问题描述】:

所以我不熟悉在 python 中使用 2D 列表。基本上我有一个巨大的 csv 格式的 excel 文件。我已将所有单元格存储到一个名为矩阵的列表中。但是,我只需要第 4 - 5 列中的信息。我尝试使用 2D 列表的范围,但它似乎不起作用。这两列分别包含客户 ID 和 True 语句。我的主要目的只是计算每个客户 ID 出现的次数并将其存储到另一个二维数组中。我只做到了这一点:

with open('authlog_20140305-20140617.csv','r') as file:
    contents = csv.reader(file)
    matrix = list()
    for row in contents:
        matrix.append(row)

for item in matrix:   # what I want is so that I only read columns 4 - 5 in matrix
    for item2 in uniqueIDs:
        if(item != item2):
            item2.append(item)

我们将不胜感激!

【问题讨论】:

  • 如果您只对从 1 开始编号的第 4 列和第 5 列感兴趣,请使用从 0 开始的列索引,例如 matrix.append(row[3:4])... 但如果您只是计算具有特定客户 ID 的所有行?
  • 其实所有行都有一个客户ID

标签: csv python-3.x


【解决方案1】:

我不知道uniqueIDs 是什么,但我认为它是一个列表或集合,对吧?

这段代码:

for line in matrix:

将遍历矩阵的每一行。要查看第 4 列和第 5 列,您只需要使用 line[3] 表示第 4 列,使用 line[4] 表示第 5 列(请记住,python 中的列表索引为 0)。

之后,您可以使用该信息做您需要的事情。

【讨论】:

    【解决方案2】:

    我将有一个信念的飞跃,并假设您需要计算第 4 列中的项目,如果第 5 列等于字符串“true”(或其他一些简单的if 条件):

    import csv
    from collections import Counter
    
    with open('authlog_20140305-20140617.csv','r') as file:
        contents = csv.reader(file)
        c = Counter(row[3] for row in contents if row[4]=='true')
    print(dict(c))
    

    请参阅有关 collections.Countergenerator expressions 的文档

    样本数据:

    1,2,3,4,true
    1,2,3,4,true
    1,2,3,5,true
    1,2,3,5,false
    

    输出:{'4': 2, '5': 1}

    【讨论】:

    • 集合是python库的一部分还是我必须下载它?
    • 是的,collections 是标准库的一部分。答案甚至还有文档链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2023-03-17
    • 1970-01-01
    • 2022-07-22
    • 2015-05-22
    • 2021-07-25
    相关资源
    最近更新 更多