numpy中是否有一个函数可以确定字符串是整数还是浮点数并自动转换它们?例如,我经常有一组记录,这些记录使用str.strip()
和str.split()
的组合从文本文件中解析。然后我得到像
List = [['1','a','.3'],
['2','b','-.5']]
然后使用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')])
在R中,有一个名为type.convert
的函数,字符串的向量/列传递给它,它将确定列的类型应该是什么(即如果它是字符串和数字的混合,它将仍然是一个字符向量)。 Excel也会这样做(基于前6个元素,如果我没记错的话)......
NumPy / Python中有这样的功能吗?我知道我可能会编写一个函数来测试列的每个元素是否可以转换为整数等,但是内置了什么?我知道在所有的例子中,处方是明确指定dtypes,但我想跳过这一步。感谢。
答案 0 :(得分:5)
dtype=None
:,numpy.genfromtxt可以猜测dtypes
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')]
请注意,最好将np.genfromtxt
直接应用于您的文本文件,而不是创建中间列表List
(或我称之为alist
)。如果您需要在将文件发送到np.genfromtxt
之前对文件进行一些处理,则可以在文件周围创建一个file-like object wrapper来处理并传递给np.genfromtxt
。