Похоже, вы должны указать длину строки, если вы не хотите, чтобы она была объектом. Например:
dtype={'USAF': '|S6'}
Я не могу найти ссылку для этого, но, похоже, я вспоминаю, что Уэс обсуждает этот вопрос (возможно, в разговоре). Он предположил, что numpy не допускает «правильные» строки переменной длины (см. Этот вопрос / ответ ), и использование максимальной длины для заполнения массива будет чаще, чем не быть невероятно пространственным неэффективным (даже если строка короткая, она будет использовать столько места, сколько самая длинная строка).
Как указывает @Wes, это также случай, когда:
dtype={'USAF': object}
работает так же хорошо.