簡體   English   中英

刪除引號並轉換為浮點數

[英]Removing quotation marks and convert to floats

我有一個文本文件,其格式如下:

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將其轉換為浮點數?

您不能將它們直接轉換為浮點數,因為:

  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:

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開始)到倒數第二個字符獲取字符串。 然后,將其轉換為浮點數,然后將其添加到新列表中。 然后,您可以刪除舊列表。

>>> 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]
>>> 

您的問題是,字符串中包含逗號。 這就是為什么在轉換之前需要刪除逗號標記的原因。 我能想到的是

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

在適當的位置使用此行。

只需像這樣更改代碼中的追加,便會獲得浮點列表:

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的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM