Старая тема, я знаю. Нашел проблему с кем-то, использующим PDO, и ответ заключался в том, чтобы использовать это для строки подключения PDO:
$pdo = new PDO(
'mysql:host=mysql.example.com;dbname=example_db',
"username",
"password",
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
Сайт, на котором я взял это, отключен, смог получить его с помощью кеша google.
Похоже, вы должны указать длину строки, если вы не хотите, чтобы она была объектом. Например:
dtype={'USAF': '|S6'}
Я не могу найти ссылку для этого, но, похоже, я вспоминаю, что Уэс обсуждает этот вопрос (возможно, в разговоре). Он предположил, что numpy не допускает «правильные» строки переменной длины (см. Этот вопрос / ответ ), и использование максимальной длины для заполнения массива будет чаще, чем не быть невероятно пространственным неэффективным (даже если строка короткая, она будет использовать столько места, сколько самая длинная строка).
Как указывает @Wes, это также случай, когда:
dtype={'USAF': object}
работает так же хорошо.
Это вопрос об угадывании pandas dtype.
Pandas видит числа и догадки , вы хотите, чтобы это были числа.
Чтобы панды не сомневались ваши намерения, вы должны установить нужный тип dtype: object
pd.read_csv('filename.csv', dtype={'leading_zero_column_name': object})
Будет делать трюк
Эта проблема вызвала у меня всевозможные головные боли при анализе файла с серийными номерами. По неизвестным причинам 00794 и 000794 представляют собой два разных серийных номера. В конце концов я придумал
converters={'serial_number': lambda x: str(x)}