在python中将字符串转换为float(并删除小数点)

时间:2014-10-17 14:50:26

标签: python

我试图创建一个导入csv文件的函数,该文件保存每年人口记录(作为字符串)。它导入一个文件,该文件在第3列中具有年份,在第4列中具有人口数。

它应该删除小数点'。'并显示由此产生的人口。

16122.83
16223.248

应该成为

1612283
16223248

当我尝试这样做时,我得到:print_population_list     year,population = row [2],float(row [3])ValueError:无法将字符串转换为float:POP。 这是我的代码:

import csv
file = csv.reader(open(filename))

year, population = 0, 0

for row in file:
    year, population = row[2], float(row[3])
    print year,":", population,

为了做到这一点,我认为首先应将其转换为浮点数并乘以最大小数位数,然后删除末尾的所有零值(因为数据不会被删除)都具有相同的小数位数)。但我一直坚持浮动转换。

2 个答案:

答案 0 :(得分:2)

最直接的路线:

>>> s = '16122.83'
>>> int(s.replace('.', ''))
1612283

虽然在您的用例中性能可能不是一个大问题, 替换策略比分裂加入策略快30%左右, 基于a simple benchmark

Benchmark Report
================

Options
-------

   name | rank | runs |     mean |        sd | timesBaseline
--------|------|------|----------|-----------|--------------
replace |    1 | 1000 | 0.009488 | 0.0006711 |           1.0
   join |    2 | 1000 |  0.01258 | 0.0007729 | 1.32589602108

Each of the above 2000 runs were run in random, non-consecutive order by
`benchmark` v0.1.5 (http://jspi.es/benchmark) 

对于此问题,您似乎需要int。但是对于相关问题,使用float代替int会使您处于浮点范围内。 round(value, places)功能也可能很方便。

答案 1 :(得分:1)

这应该可以解决问题

def decToNum(s):
    return int(''.join(s.split('.')))

>>> s = '16122.83'
>>> decToNum(s)
1612283