 <p>When I make an zero array with your dtype</p> <pre><code>In [548]: dt=np.dtype([('MSFT','float'),('CSCO','float'),('GOOG','float') ]) In [549]: A = np.zeros(3, dtype=dt) In [550]: A Out[550]: array([(0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (0.0, 0.0, 0.0)], dtype=[('MSFT', '&lt;f8'), ('CSCO', '&lt;f8'), ('GOOG', '&lt;f8')]) </code></pre> <p>notice that the display shows a list of tuples. That's intentional, to distinguish the <code>dtype</code> records from a row of a 2d (ordinary) array.</p> <p>That also means that when creating the array, or assigning values, you also need to use a list of tuples.</p> <p>For example let's make a list of lists:</p> <pre><code>In [554]: ll = np.arange(9).reshape(3,3).tolist() In [555]: ll In [556]: A[:]=ll ... TypeError: a bytes-like object is required, not 'list' </code></pre> <p>but if I turn it into a list of tuples:</p> <pre><code>In [557]: llt = [tuple(i) for i in ll] In [558]: llt Out[558]: [(0, 1, 2), (3, 4, 5), (6, 7, 8)] In [559]: A[:]=llt In [560]: A Out[560]: array([(0.0, 1.0, 2.0), (3.0, 4.0, 5.0), (6.0, 7.0, 8.0)], dtype=[('MSFT', '&lt;f8'), ('CSCO', '&lt;f8'), ('GOOG', '&lt;f8')]) </code></pre> <p>assignment works fine. That list also can be used directly in <code>array</code>.</p> <pre><code>In [561]: np.array(llt, dtype=dt) Out[561]: array([(0.0, 1.0, 2.0), (3.0, 4.0, 5.0), (6.0, 7.0, 8.0)], dtype=[('MSFT', '&lt;f8'), ('CSCO', '&lt;f8'), ('GOOG', '&lt;f8')]) </code></pre> <p>Similarly assigning values to one record requires a tuple, not a list:</p> <pre><code>In [563]: A[0]=(10,12,14) </code></pre> <p>The other common way of setting values is on a field by field basis. That can be done with a list or array:</p> <pre><code>In [564]: A['MSFT']=[100,200,300] In [565]: A Out[565]: array([(100.0, 12.0, 14.0), (200.0, 4.0, 5.0), (300.0, 7.0, 8.0)], dtype=[('MSFT', '&lt;f8'), ('CSCO', '&lt;f8'), ('GOOG', '&lt;f8')]) </code></pre> <p>The <code>np.rec.fromarrays</code> method recommended in the other answer ends up using the copy-by-fields approach. It's code is, in essence:</p> <pre><code>arrayList = [sb.asarray(x) for x in arrayList] &lt;determine shape&gt; &lt;determine dtype&gt; _array = recarray(shape, descr) # populate the record array (makes a copy) for i in range(len(arrayList)): _array[_names[i]] = arrayList[i] </code></pre>