我有一些列表,例如
list1 = ['hi',2,3,4]
list2 = ['hello', 7,1,8]
list3 = ['morning',7,2,1]
'hi','hello'和'morning'是字符串,其余是数字。
然而,我尝试将它们叠加为:
matrix = np.vstack((list1,list2,list3))
但是数字的类型变成了字符串。特别是它们变为numpy_str
。
我该如何解决这个问题?我尝试更换物品,我尝试改变它们的类型,没有任何作用
修改
我在上面犯了一个错误!在我原来的问题中,第一个列表实际上是一个标题列表,例如 list1 = ['hi', 'number of hours', 'number of days', 'ideas']
所以第一列(在垂直堆叠的数组中)是一列字符串。其他列的字符串作为第一个元素,然后是数字。
答案 0 :(得分:2)
由于number可以写成字符串,但字符串不能写为数字,因此matrix
将包含字符串类型的所有元素。
如果您想要一个整数矩阵,您可以: 1-提取与您的数字对应的子矩阵,然后将其映射为整数2-或者您可以直接从列表中提取数字并将其叠加。
import numpy as np
list1 = ['hi',2,3,4]
list2 = ['hello', 7,1,8]
list3 = ['morning',7,2,1]
matrix = np.vstack((list1,list2,list3))
# First
m = map(np.int32,matrix[:,1:])
# [array([2, 3, 4], dtype=int32), array([7, 1, 8], dtype=int32), array([7, 2, 1], dtype=int32)]
# Second
m = np.vstack((list1[1:],list2[1:],list3[1:]))
# [[2 3 4] [7 1 8] [7 2 1]]
修改(回复评论)
我将调用标题列表list0
:
list0 = ['hi', 'nb_hours', 'nb_days', 'ideas']
基本上是相同的想法:
1-堆叠所有然后提取子矩阵(这里我们既没有第一行也没有第一列:[1:,1:]
)
matrix = np.vstack((list0,list1,list2,list3))
matrix_nb = map(np.int32,matrix[1:,1:])
2-直接不堆叠list0
并堆叠所有其他列表(第一个元素[1:]
除外):
m = np.vstack((list1[1:],list2[1:],list3[1:]))
答案 1 :(得分:2)
您可以使用Pandas DataFrames,它们允许异构数据:
>>> pandas.DataFrame([list1, list2, list3])
0 1 2 3
0 hi 2 3 4
1 hello 7 1 8
2 morning 7 2 1
如果要为列命名,也可以这样做:
pandas.DataFrame([list1, list2, list3], columns=list0)
hi nb_hours nb_days ideas
0 hi 2 3 4
1 hello 7 1 8
2 morning 7 2 1