最近在爬一个博客,爬下来的数据保存在一个二维列表中(元素是列表的列表)。在用numpy.array创建二维数组的时候报错:ValueError: invalid literal for long() with base 10,后来把博客数据修改为元组的列表解决。虽然能解决问题,但还没找到根本原因,官网推荐是用元组的列表,在stackoverflow上也有相关的帖子但是也没有找到真正的原因。
注:博客数据类型有整数和中文字符串。
用列表的列表(list of list)创建numpy.array
创建列表的列表:
import numpy as np
list1 = [
[1,'张三'],
[2,'李四'],
[3,'王五']
]
print list1
for i in list1:
print i[0],i[1]
输出结果:
[[1, '\xe5\xbc\xa0\xe4\xb8\x89'], [2, '\xe6\x9d\x8e\xe5\x9b\x9b'], [3, '\xe7\x8e\x8b\xe4\xba\x94']]
1 张三
2 李四
3 王五
创建自定义数据类型
dt = np.dtype([('id','i'),('name','S20')])
print dt
结果
[('id', '<i4'), ('name', 'S20')]
创建numpy.array报错
arr1 = np.array(list1,dtype=dt)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-1748646e8316> in <module>()
----> 1 arr1 = np.array(list1,dtype=dt)
ValueError: invalid literal for long() with base 10: '\xe5\xbc\xa0\xe4\xb8\x89'
print '\xe5\xbc\xa0\xe4\xb8\x89'
张三
用元组的列表(list of tuple)创建numpy.array
注意list2与list1的区别:
list2 = [
(1,'张三'),
(2,'李四'),
(3,'王五')
]
print list2
for i in list2:
print i[0],i[1]
[(1, '\xe5\xbc\xa0\xe4\xb8\x89'), (2, '\xe6\x9d\x8e\xe5\x9b\x9b'), (3, '\xe7\x8e\x8b\xe4\xba\x94')]
1 张三
2 李四
3 王五
arr1 = np.array(list2,dtype=dt)
print type(arr1)
print arr1
for i in arr1:
print i[0],i[1]
<type 'numpy.ndarray'>
[(1, '\xe5\xbc\xa0\xe4\xb8\x89') (2, '\xe6\x9d\x8e\xe5\x9b\x9b')
(3, '\xe7\x8e\x8b\xe4\xba\x94')]
1 张三
2 李四
3 王五