自动检测/转换数据类型?

hat*_*rix 3 python numpy scipy

numpy中是否有一个函数来确定字符串是整数还是浮点数并自动转换它们?举例来说,我经常的被使用的组合的文本文件解析记录的集合str.strip()str.split().然后我得到类似的东西

List = [['1','a','.3'],
        ['2','b','-.5']]
Run Code Online (Sandbox Code Playgroud)

然后使用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')])
Run Code Online (Sandbox Code Playgroud)

在R中,有一个函数调用type.convert,传递字符串的向量/列,它将确定列的类型应该是什么(即如果它是字符串和数字的混合,它将保持字符向量).Excel也这样做(基于它的前6个元素,如果我没记错的话)......

在NumPy/Python中有这样的功能吗?我知道我可能会编写一个函数来测试列的每个元素是否可以转换为整数等,但是内置了什么?我知道在所有的例子中,处方是明确指定dtypes,但我想跳过这一步.谢谢.

unu*_*tbu 5

如果设置,numpy.genfromtxt可以猜测dtypes 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', '<i4'), ('f1', '|S1'), ('f2', '<f8')]
Run Code Online (Sandbox Code Playgroud)

请注意,最好np.genfromtxt直接应用于您的文本文件,而不是创建中间列表List(或我所谓的alist).如果你需要在发送之前对文件进行一些处理np.genfromtxt,你可以在文件周围创建一个类似文件的对象包装器,它可以进行处理并传递给它np.genfromtxt.