Gracias OP por tu pregunta y Roman por tu respuesta. Tuve que buscar un poco para encontrar esto; Espero que lo siguiente ayude a otros.
Python 2.7
Ver: https://docs.scipy.org/doc/numpy/user/basics.io.genfromtxt.html
import numpy as np
from StringIO import StringIO
data = "1, abc , 2\n 3, xxx, 4"
print type(data)
"""
<type 'str'>
"""
print '\n', np.genfromtxt(StringIO(data), delimiter=",", dtype="|S3", autostrip=True)
"""
[['1' 'abc' '2']
['3' 'xxx' '4']]
"""
print '\n', type(data)
"""
<type 'str'>
"""
print '\n', np.genfromtxt(StringIO(data), delimiter=",", autostrip=True)
"""
[[ 1. nan 2.]
[ 3. nan 4.]]
"""
Python 3.5:
import numpy as np
from io import StringIO
import io
data = "1, abc , 2\n 3, xxx, 4"
#print(data)
"""
1, abc , 2
3, xxx, 4
"""
#print(type(data))
"""
<class 'str'>
"""
#np.genfromtxt(StringIO(data), delimiter=",", autostrip=True)
# TypeError: Can't convert 'bytes' object to str implicitly
print('\n')
print(np.genfromtxt(io.BytesIO(data.encode()), delimiter=",", dtype="|S3", autostrip=True))
"""
[[b'1' b'abc' b'2']
[b'3' b'xxx' b'4']]
"""
print('\n')
print(np.genfromtxt(io.BytesIO(data.encode()), delimiter=",", autostrip=True))
"""
[[ 1. nan 2.]
[ 3. nan 4.]]
"""
Aparte:
dtype = "| Sx", donde x = cualquiera de {1, 2, 3, ...}:
dtypes Diferencia entre S1 y S2 en Python
"Las cadenas | S1 y | S2 son descriptores de tipo de datos; el primero significa que la matriz contiene cadenas de longitud 1, la segunda de longitud 2. ..."
TypeErrors (se espera un argumento de cadena, obtuvo 'bytes') si realiza este cambio de forma aislada. Debe distinguir cuidadosamente btyes y str (unicode) en python 3.