我试图创建一个导入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,
为了做到这一点,我认为首先应将其转换为浮点数并乘以最大小数位数,然后删除末尾的所有零值(因为数据不会被删除)都具有相同的小数位数)。但我一直坚持浮动转换。
答案 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