【问题标题】:Convert CSV column to list将 CSV 列转换为列表
【发布时间】:2015-04-01 17:56:48
【问题描述】:

假设我有一个 CSV 文件。 它包含:

a,b,c
1,2,3
4,5,6
7,8,9

如何将标有“a”的列转换为列表,而不用硬编码一行?

最初,我为第一行 a,b,c 做一个 readline,然后将一行硬编码到每个变量。但后来我想:如果我想用 CSV 文件的排列方式不同的可能性来做这件事 - 比如说:

b,a,c
2,1,3
5,4,6
8,7,9

最好的方法是什么?

【问题讨论】:

    标签: python arrays list csv


    【解决方案1】:

    csv.DictReader 将 CSV 文件的每一行转换为以列标题为键的字典。对于您的情况(假设您问题中的两个示例分别命名为 abc.csvbac.csv),您可以这样使用它:

    from csv import DictReader
    
    with open("abc.csv") as f:
        a1 = [row["a"] for row in DictReader(f)]
    
    with open("bac.csv") as f:
        a2 = [row["a"] for row in DictReader(f)]
    
    # a1 == a2 == ['1', '4', '7']
    

    【讨论】:

      【解决方案2】:

      您可以使用pandas 库来做到这一点:

      import pandas
      
      data = pandas.read_csv("test.csv", header=0)
      col_a = list(data.a)
      col_b = list(data.b)
      col_c = list(data.c)
      

      col_acol_bcol_c中的值如下:

      [1, 4, 7]
      [2, 5, 8]
      [3, 6, 9]
      

      【讨论】:

        【解决方案3】:

        你可以使用collections.defaultdict:

        import collections
        my_dict = collections.defaultdict(list)
        with open('your_file') as f:
            header = next(f).strip().split(',')
            for x in f:
                 x = x.strip().split(',')
                 my_dict[header[0]].append(x[0])
                 my_dict[header[1]].append(x[1])
                 my_dict[header[2]].append(x[2])
        

        【讨论】:

          【解决方案4】:

          使用函数获取标题的索引,然后使用它打印每个标题中的元素

          from pandas import read_csv
          data = read_csv('weather.csv', header=0)
          headers = []
          def forHeaders():
              for row in data:
                  headers.append(row)
          
              for info in data:
                  main = list(data[headers][info])
                  print(main)
          forHeaders()
          

          【讨论】:

          • 这不符合问题的要求。尝试改进你的答案。
          猜你喜欢
          • 2019-12-17
          • 1970-01-01
          • 2016-01-15
          • 1970-01-01
          • 2019-07-14
          • 2018-06-23
          • 2018-10-25
          • 2014-04-24
          • 1970-01-01
          相关资源
          最近更新 更多