【问题标题】:Removing quotation marks and convert to floats删除引号并转换为浮点数
【发布时间】:2014-04-28 13:07:25
【问题描述】:

我有一个格式如下的文本文件:

DEPT    FTR RPT_PERIOD
Project Management  "68,760.23" 12-Month
Project Management  "142,483.33"    12-Month
AEC Administration  "37,175.06" 12-Month

我的目标是提取引号中的薪水(在 FTR 列下),将它们全部加起来并根据部门找到平均值。但是,当我将薪水附加到列表时,它们都是字符串,我无法删除引号将它们转换为浮点数。这是我目前所拥有的,我正在逐步编写代码:

salary_file = open("salaries.txt", "r")
headers = salary_file.readline()

salaries = [] 

for line in salary_file.readlines():
  line.rstrip()
  (dept, ftr, rpt_period) = line.split('\t')
  salaries.append(ftr)

print salaries
#Sample output: ['"68,760.23"', '"142,483.33"', '"37,175.06"']

如何删除“”引号,以便使用 map 将它们转换为浮点数?

【问题讨论】:

    标签: python string


    【解决方案1】:

    您可以执行以下操作来获取字符串的第一个和最后一个字符以外的所有内容,然后转换为浮点数,如下所示:

    new_salaries = []
    for i in salaries:
        i = i.replace(",", "")
        new_salaries.append(float(i[1:-1]))
    print new_salaries
    del salaries
    

    您可以使用i[1:-1],也可以使用i.replace('"', '')

    如果您的字符串是some_string = "abcdefg",那么some_string[1:-1] 将返回"bcdef"

    i[1:-1] 部分获取从第二个字符(因为索引从 0 开始)到倒数第二个字符的字符串。然后将其转换为浮点数,然后将其添加到新列表中。然后,您可以删除旧列表。

    【讨论】:

      【解决方案2】:

      您不能直接将它们转换为浮点数,因为:

      1. 有双引号
      2. float() 看不懂号码中的,

      所以,去掉多余的引号和,

      >>> salaries = ['"68,760.23"', '"142,483.33"', '"37,175.06"']
      >>> [float("".join(x.replace('"', '').split(","))) for x in salaries]
      [68760.23, 142483.33, 37175.06]
      >>> 
      

      但也许你应该在附加到列表时处理这个问题:

      with open("salaries.txt", "r") as salary_file:
          for line in salary_file:
              dept, ftr, rpt_period = line.rstrip().split("\t")
              try:
                  salaries.append(float("".join(ftr.split(",")))
              except ValueError:
                  # Can't convert to float, perhaps it's a comment or the header.
                  pass
      

      小心,您必须确保文件实际上是制表符分隔的。

      【讨论】:

      • [float(x.replace('"', '').replace(',', '')) for x in salaries] 应该这样做。无需拆分。
      【解决方案3】:
      >>> salaries = ['"68,760.23"', '"142,483.33"', '"37,175.06"']
      >>> s = [ele.replace('"', "") for ele in salaries]
      >>> s
      ['68,760.23', '142,483.33', '37,175.06']
      >>> [float(ele.replace(",", ""))for ele in s]
      [68760.23, 142483.33, 37175.06]
      >>> 
      

      【讨论】:

        【解决方案4】:

        您的问题是,字符串中有逗号。这就是为什么在转换之前您需要删除逗号标记。 我能想到的一种方法是,

        float(x.split('"')[1].replace(',',''))
        

        在适当的位置使用这条线。

        【讨论】:

          【解决方案5】:

          只需像这样更改代码中的附加内容,您将获得浮点数列表:

          salary_file = open("salaries.txt", "r")
          headers = salary_file.readline()
          
          salaries = [] 
          
          for line in salary_file.readlines():
              line.rstrip()
              (dept, ftr, rpt_period) = line.split('\t')
              salaries.append(ftr.replace('"', '').replace(',', ''))
          
          print salaries
          #Sample output: [68760.23, 142483.33, 37175.06]
          

          或者,如果您只想删除 ", 以便可以使用 map(),请参阅 @msvalkon 的回答。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-31
            • 1970-01-01
            • 2019-01-21
            • 1970-01-01
            • 2019-09-17
            • 1970-01-01
            • 2020-05-12
            • 2021-11-16
            相关资源
            最近更新 更多