Detección / conversión automática de tipos de datos?

¿Hay una función en el número que determina si las cadenas deben ser enteros o números de punto flotante y los convierte automáticamente? Por ejemplo, a menudo tengo una colección de registros que se analizan desde un archivo de texto usando una combinación de str.strip() y str.split() . Entonces me sale algo como

 List = [['1','a','.3'], ['2','b','-.5']] 

Que luego se convierte utilizando numpy.rec.fromrecords :

 In [1227]: numpy.rec.fromrecords(List) Out[1227]: rec.array([('1', 'a', '.3'), ('2', 'b', '-.5')], dtype=[('f0', '|S1'), ('f1', '|S1'), ('f2', '|S3')]) 

En R, hay una función llamada type.convert a la cual se type.convert vectores / columnas de cadenas de caracteres y determinará cuál debe ser el tipo de la columna (es decir, si se trata de una combinación de cadenas y números, seguirá siendo un vector de caracteres) . Excel también hace esto (basado en sus primeros 6 elementos, si recuerdo correctamente) …

¿Existe tal función en NumPy / Python? Sé que probablemente podría escribir una función para probar si cada elemento de una columna podría convertirse en un entero, etc., pero ¿hay algo integrado? Sé que en todos los ejemplos, la prescripción consiste en especificar los dtypes explícitamente, pero me gustaría omitir este paso. Gracias.

numpy.genfromtxt puede adivinar dtypes si establece dtype=None :

 import numpy as np import io alist = [['1','a','.3'], ['2','b','-.5']] f = io.BytesIO('\n'.join(' '.join(row) for row in alist)) arr = np.genfromtxt(f,dtype=None) print(arr) print(arr.dtype) # [(1, 'a', 0.3) (2, 'b', -0.5)] # [('f0', ' 

Tenga en cuenta que sería mejor aplicar np.genfromtxt directamente a su archivo de texto en lugar de crear la lista de la lista intermedia (o lo que llamé alist ). Si necesita realizar algún procesamiento del archivo antes de enviarlo a np.genfromtxt , podría hacer un envoltorio de objeto similar a un archivo alrededor del archivo que pueda hacer el procesamiento y pasarlo a np.genfromtxt .