You can see the problem if you print the array and carefully look:
>>> numpy.array(data, dtype=[('label', str), ('x', float), ('y', float)]) array([('', 1.0, 2.0), ('', 2.0, 4.0), ('', 3.0, 6.0)], dtype=[('label', '|S0'), ('x', '<f8'), ('y', '<f8')])
The first field has a data type of '|S0' - a row field of zero width. Make the string field longer - here is the string field:
>>> numpy.array(data, dtype=[('label', 'S2'), ('x', float), ('y', float)]) array([('a', 1.0, 2.0), ('b', 2.0, 4.0), ('c', 3.0, 6.0)], dtype=[('label', '|S2'), ('x', '<f8'), ('y', '<f8')])
You can also do this as described here :
>>> numpy.array(data, dtype=[('label', (str, 2)), ('x', float), ('y', float)]) array([('a', 1.0, 2.0), ('b', 2.0, 4.0), ('c', 3.0, 6.0)], dtype=[('label', '|S2'), ('x', '<f8'), ('y', '<f8')])