【问题标题】:Read a csv to a float skipping the first column读取一个 csv 到一个跳过第一列的浮点数
【发布时间】:2021-04-30 17:00:48
【问题描述】:

S 我有一个 csv 文件,里面有一堆数据。当我尝试一些方法将整个事物转换为浮点数时,它给了我一个错误,说我无法将第一列中项目的内容更改为字符串(它实际上只是在它到达第一列后中断,所以我的假设是第一行的内容无法转换,这很好)。

我希望能够跳过第一列并将其余内容转换为浮点数。

当我读入我的 csv 文件时:

with open ('timecards.csv') as tcards:
    tcards = csv.reader(tcards)
    tfloat =[]
    for i in tcards:
        print(i)

我得到以下输出:

['51-4678119', '7.6', '3.1', '1.4', '4.1', '6.4', '7.7', '6.6']
['87-6664864', '5.2', '3.8', '7.5', '7.8', '7.0', '2.1', '3.6', '7.1', '5.1']
['07-3318962', '2.5', '6.9', '7.9', '7.7', '1.1', '2.6', '5.9', '6.1', '7.5', '3.6']
['06-4413296', '5.9', '4.2', '6.2', '3.1', '2.2', '7.6', '4.7', '6.7', '1.9', '7.4']
['58-5924013', '6.1', '6.2', '1.4', '3.2', '1.4', '1.2', '2.4', '4.4', '5.8', '2.2']
['45-9277595', '6.8', '1.6', '5.1', '3.2', '2.6', '7.1', '4.9', '1.6', '7.2', '2.8']
['04-0002399', '1.1', '6.2', '2.4', '3.8', '2.7', '7.0', '6.2', '2.3', '6.2', '4.3']
['27-7347997', '3.1', '2.1', '4.2', '3.7', '6.5', '7.0', '7.0', '3.9', '3.5', '4.6']
['38-0238479', '7.1', '2.1', '2.7', '6.8', '3.9', '2.6', '2.0', '1.5', '2.6', '1.3']

等等。我想让我的第一列保留一个我猜想的字符串,并将我的其余内容转换为浮点数。谢谢!

【问题讨论】:

    标签: python string list csv


    【解决方案1】:

    这是使用map的一种方法

    例如:

    result =[]
    with open ('timecards.csv') as tcards:
        tcards = csv.reader(tcards)
        for row in tcards:
            c1, *lst = row    # Column1 and rest of columns 
            result.append([c1] + list(map(float, lst)))  
    

    【讨论】:

      【解决方案2】:
      import csv
      with open ('/tmp/timecards.csv') as tcards:
          for i in csv.reader(tcards):
              print([i[0]] + list(map(float, i[1:])))
      

      结果:

      ['51-4678119', 7.6, 3.1, 1.4, 4.1, 6.4, 7.7, 6.6]
      ['87-6664864', 5.2, 3.8, 7.5, 7.8, 7.0, 2.1, 3.6, 7.1, 5.1]
      ['07-3318962', 2.5, 6.9, 7.9, 7.7, 1.1, 2.6, 5.9, 6.1, 7.5, 3.6]
      ['06-4413296', 5.9, 4.2, 6.2, 3.1, 2.2, 7.6, 4.7, 6.7, 1.9, 7.4]
      ['58-5924013', 6.1, 6.2, 1.4, 3.2, 1.4, 1.2, 2.4, 4.4, 5.8, 2.2]
      ['45-9277595', 6.8, 1.6, 5.1, 3.2, 2.6, 7.1, 4.9, 1.6, 7.2, 2.8]
      ['04-0002399', 1.1, 6.2, 2.4, 3.8, 2.7, 7.0, 6.2, 2.3, 6.2, 4.3]
      ['27-7347997', 3.1, 2.1, 4.2, 3.7, 6.5, 7.0, 7.0, 3.9, 3.5, 4.6]
      ['38-0238479', 7.1, 2.1, 2.7, 6.8, 3.9, 2.6, 2.0, 1.5, 2.6, 1.3]
      

      【讨论】:

        【解决方案3】:
        >>> tcards = [['51-4678119', '7.6', '3.1', '1.4', '4.1', '6.4', '7.7', '6.6'],
                      ['87-6664864', '5.2', '3.8', '7.5', '7.8', '7.0', '2.1', '3.6', '7.1', '5.1']]
        >>> [[row[0]] + list(map(float, row[1:])) for row in tcards]
        [['51-4678119', 7.6, 3.1, 1.4, 4.1, 6.4, 7.7, 6.6],
         ['87-6664864', 5.2, 3.8, 7.5, 7.8, 7.0, 2.1, 3.6, 7.1, 5.1]]
        >>> # alternative (maybe simpler?)
        >>> [[row[0]] + [float(val) for val in row[1:]] for row in tcards]
        [['51-4678119', 7.6, 3.1, 1.4, 4.1, 6.4, 7.7, 6.6],
         ['87-6664864', 5.2, 3.8, 7.5, 7.8, 7.0, 2.1, 3.6, 7.1, 5.1]]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-29
          • 1970-01-01
          • 2017-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多