A maneira mais rápida de fazer conversão de tipo de dados usando csv.DictReader em python

Estou trabalhando com um arquivo CSV em python, que terá ~ 100.000 linhas quando estiver em uso. Cada linha possui um conjunto de dimensões (como seqüências de caracteres) e uma única métrica (flutuante).

Como csv.DictReader ou csv.reader retornam valores apenas como string, atualmente estou iterando em todas as linhas e convertendo o valor numérico em um float.

for i in csvDict:
    i[col] = float(i[col])

Existe uma maneira melhor que alguém possa sugerir para fazer isso? Venho brincando com várias combinações de mapa, izip, itertools e procurei extensivamente algumas amostras de fazê-lo com mais eficiência, mas infelizmente não obtivemos muito sucesso.

Caso isso ajude: estou fazendo isso no appengine. Euacreditam que o que estou fazendo pode resultar em que eu acerte esse erro: Excedeu o limite de tamanho de processo flexível com 267.789 MB após atender 11 pedidos no total - só o recebo quando o CSV é muito grande.

Editar: Meu Objetivo Estou analisando este CSV para que eu possa usá-lo como umfonte de dados para a API de visualizações do Google. O conjunto de dados final será carregado em uma DataTable gviz para consulta. O tipo deve ser especificado durante a construção desta tabela. Meu problema também poderia ser resolvido se alguém soubesse de um bom conversor gviz csv-> datatable em python!

Edit2: Meu Código

Acredito que meu problema esteja relacionado à maneira como tento fixCsvTypes (). Além disso, data_table.LoadData () espera um objeto iterável.

class GvizFromCsv(object):
  """Convert CSV to Gviz ready objects."""

  def __init__(self, csvFile, dateTimeFormat=None):
    self.fileObj = StringIO.StringIO(csvFile)
    self.csvDict = list(csv.DictReader(self.fileObj))
    self.dateTimeFormat = dateTimeFormat
    self.headers = {}
    self.ParseHeaders()
    self.fixCsvTypes()

  def IsNumber(self, st):
    try:
        float(st)
        return True
    except ValueError:
        return False

  def IsDate(self, st):
    try:
      datetime.datetime.strptime(st, self.dateTimeFormat)
    except ValueError:
      return False

  def ParseHeaders(self):
    """Attempts to figure out header types for gviz, based on first row"""
    for k, v in self.csvDict[0].items():
      if self.IsNumber(v):
        self.headers[k] = 'number'
      elif self.dateTimeFormat and self.IsDate(v):
        self.headers[k] = 'date'
      else:
        self.headers[k] = 'string'

  def fixCsvTypes(self):
    """Only fixes numbers."""
    update_to_numbers = []
    for k,v in self.headers.items():
      if v == 'number':
        update_to_numbers.append(k)
    for i in self.csvDict:
      for col in update_to_numbers:
        i[col] = float(i[col])

  def CreateDataTable(self):
    """creates a gviz data table"""
    data_table = gviz_api.DataTable(self.headers)
    data_table.LoadData(self.csvDict)
    return data_table

questionAnswers(3)

yourAnswerToTheQuestion