【问题标题】:Parsing and doing analysis on csv file解析和分析csv文件
【发布时间】:2020-04-07 21:41:35
【问题描述】:

我想解析一个类似于 enter image description here 的 CSV 文件。这是一个 Excel 电子表格。

我想读取 csv 文件并从每列中获取数据作为列表。因此,假设我将字段名称称为“低”,我想将该字段名称下的数据作为列表获取,以便对其进行分析。到目前为止,我正在使用下面的代码读取文件,但我不知道如何从每一列中获取数据。

import csv 

filename = "csv practice file.csv"

fields = [] 
rows = [] 

with open(filename, 'r') as csvfile:  
    csvreader = csv.reader(csvfile) 

    fields = csvreader.__next__()

    for row in csvreader: 
        rows.append(row) 

`

【问题讨论】:

    标签: python python-3.x list csv


    【解决方案1】:

    如果您将csv.DictReader 与“list comprehension”一起使用,则相当容易:

    import csv
    
    filename = "csv practice file.csv"
    
    with open(filename, 'r', newline='') as csvfile:
        csvreader = csv.DictReader(csvfile)
        fields = csvreader.fieldnames
        rows = [row['Low'] for row in csvreader]
    
    print(fields)
    print(rows)
    

    如果您想获取与每个字段关联的行(并将它们存储在由字段名键入的字典中),您可以使用内置的 zip() 函数首先转置行和列,并使用 " dictionary comprehension" 像这样:

    import csv
    from pprint import pprint
    
    filename = "csv practice file.csv"
    
    # To get all columns.
    with open(filename, 'r', newline='') as csvfile:
        csvreader = csv.reader(csvfile)
        fieldnames = next(csvreader)
        rows = zip(*(row for row in csvreader))
        data = {field: list(row) for field, row in zip(fieldnames, rows)}
    
    print('data:')
    pprint(data)
    

    输出:

    data:
    {'Class': ['4', '5', '9', '7', '6'],
     'High': ['465', '785', '592', '254', '962'],
     'Low': ['452', '54', '25', '78', '46'],
     'Name': ['Sara', 'Joe', 'Amanda', 'Ray', 'Bob']}
    

    【讨论】:

      【解决方案2】:

      假设我们有一个包含以下数据的文件:

      col1,col2,col3
      1,2,3
      3,4,5
      4,5,6
      

      使用csv.DictReader,我们可以将 csv 行转换为以下结构:

      {'col1': '1', 'col2': '2', 'col3': '3'}
      {'col1': '3', 'col2': '4', 'col3': '5'}
      {'col1': '4', 'col2': '5', 'col3': '6'}
      

      然后可以使用它来遍历这些dicts 并将值列明智地收集到目标字典d 中。 defaultdict 让它更舒服一点,因为我们不必检查密钥 k 是否已经存在于字典中。

      import csv
      from collections import defaultdict
      d = defaultdict(list)
      with open(filename, 'r') as csvfile:  
          csvreader = csv.DictReader(csvfile)
          for line in csvreader:
              for k, v in line.items():
                  d[k].append(v)
      

      我们最终得到一个包含按列分组的值的最终字典 d,如下所示:

      {'col1': ['1', '3', '4'], 'col2': ['2', '4', '5'], 'col3': ['3', '5', '6']}
      

      【讨论】:

        【解决方案3】:

        您可以使用库 pandas,

        import pandas as pd
        yourdata = pd.read_csv('yourfile.csv')
        

        这会将您的 csv 文件读入字典。然后您可以通过以下方式将您的列称为列表:

        yourcolumn = yourdata['columnname'].values
        

        【讨论】:

        • 您确定要添加行 filename = pd.read_csv('yourfile.csv')。您的错误似乎您没有定义变量。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        • 2016-09-16
        • 2011-04-25
        • 2016-05-04
        • 2013-11-23
        • 1970-01-01
        相关资源
        最近更新 更多