A pure Numpy approach would be using np.loadtext() and converting the strings to a proper type by passing in converter function:
In [70]: col1, col2 = np.loadtxt('test.csv', converters={0:int, 1:bytes.decode}, dtype=str, delimiter=',', unpack=True)
In [71]: col1 = col1.astype(int)
In [72]: col2 = np.vstack(np.core.defchararray.split(col2)).astype(int)
Result:
In [73]: col1
Out[73]: array([1, 3, 2, 5])
In [74]: col2
Out[74]:
array([[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[5, 6, 5, 4, 8],
[5, 4, 8, 6, 2]])
Note that before converting col2 to and array of integers it's an array of strings like following:
In [76]: col2
Out[76]:
array([' 1 2 3 4 5', ' 2 3 4 5 6', ' 5 6 5 4 8', ' 5 4 8 6 2'],
dtype='<U10')
If you also want them separated but in string type at the next step you just don't need to use vstack() and astype(). In that case you'll get:
In [77]: np.core.defchararray.split(col2)
Out[77]:
array([['1', '2', '3', '4', '5'], ['2', '3', '4', '5', '6'],
['5', '6', '5', '4', '8'], ['5', '4', '8', '6', '2']], dtype=object)