我有一个numpy矩阵X,我尝试使用以下代码更改第1列的数据类型:
X[:, 1].astype('str')
print(type(X[0, 1]))
但我得到了以下结果:
<type 'numpy.float64'>
有人知道为什么类型没有被更改为字符串吗? 还有,更改X列的类型的正确方法是什么?谢谢!
>>> a = np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
>>> a[:,1]
array([2, 5])
>>> a[:,1].astype('str') # This generates copy and then cast.
array(['2', '5'], dtype='<U21')
>>> a # So the original array did not change.
array([[1, 2, 3],
[4, 5, 6]])
让我回答第二个问题,因为我遇到了同样的问题。
正如dinarkino所提到的,仅仅将类型赋回去是不起作用的。
>>> X = np.array([[1.1,2.2],[3.3,4.4]])
>>> print(X[:,1].dtype)
<class 'numpy.float64'>
>>> X[:,1] = X[:,1].astype('str')
>>> print(X[:,1].dtype)
<class 'numpy.float64'>
所以我的方法是首先将整个矩阵的数据类型分配为“object”,然后再分配回字符串数据类型。
>>> X = X.astype('object')
>>> print(type(X[0,1]))
<class 'float'>
>>> X[:,1] = X[:,1].astype('str')
>>> print(type(X[0,1]))
<class 'str'>
>>> x = np.ones((3, 3), dtype=np.float)
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> x[:, 1] = x[:, 1].astype(np.int)
>>> type(x[:, 1][0])
numpy.float64
>>> x_pd = pd.DataFrame(x)
>>> x_pd[1] = x_pd[1].astype(np.int16)
>>> type(x_pd[1][0])
numpy.int16
>>> X = np.array([[1,2],[3,4],[5,6]])
[[1 2]
[3 4]
[5 6]]
>>> X_1 = np.array([[x,str(y)] for x,y in X],dtype='O')
[[1 '2']
[3 '4']
[5 '6']]