Все варианты, которые вы пробовали, делают одно и то же, определяют «U0». Это не просто проблема структурированного массива.
dtype=[('fruit', '<U'), ('color', '<U'), ('shape', '<U'), ('state', '<U'), ('taste', '<U2'), ('weight', '<i4'), ('radius', '<f8')])
Либо укажите более длинную длину, например «U10» или «O», объект:
In [239]: arr = np.array(
...: [
...: ('Apple', 'green', 'round', 'fresh', 'good', 10e4, np.pi)], dtype=[
...: ('fruit', 'U10'), ('color', 'O'), ('shape', 'O'),
...: ('state', 'S10'), ('taste', 'U2'), ('weight', 'i4'), ('radius', float)
...: ]
...: )
In [240]: arr
Out[240]:
array([('Apple', 'green', 'round', b'fresh', 'go', 100000, 3.14159265)],
dtype=[('fruit', '<U10'), ('color', 'O'), ('shape', 'O'), ('state', 'S10'), ('taste', '<U2'), ('weight', '<i4'), ('radius', '<f8')])
In [241]: arr['color']
Out[241]: array(['green'], dtype=object)
In [242]: arr['color']='yellow_green'
In [243]: arr['fruit']
Out[243]: array(['Apple'], dtype='<U10')
In [244]: arr['fruit']='pineapple'
In [245]: arr
Out[245]:
array([('pineapple', 'yellow_green', 'round', b'fresh', 'go', 100000, 3.14159265)],
dtype=[('fruit', '<U10'), ('color', 'O'), ('shape', 'O'), ('state', 'S10'), ('taste', '<U2'), ('weight', '<i4'), ('radius', '<f8')])
pandas
выбирает использование Объект dtype для всех его строк. Фиксированная длина строки numpy
приемлема, если строки имеют одинаковый размер и знают заранее, например, np.array(['one','two','three', 'four', 'five'])