Юникод против персонажа: что такое «\ x10» - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь понять, почему, когда мы использовали панд to_csv(), число 3189069486778499 было выведено как «0. \ x103189069486778499». И это единственный случай, произошедший с огромным количеством данных. При использовании to_csv() мы уже использовали encoding='utf8', обычно это решало бы некоторые проблемы с Unicode ...

Итак, Я пытаюсь понять, что такое "\ x10" , чтобы я мог знать почему ... Так как весь процесс выполнялся в конвейере luigi, иногда luigi генерирует странный вывод. Я попробовал то же самое в IPython, ту же версию панд, и все отлично работает ....

1 Ответ

0 голосов
/ 08 октября 2019

Поскольку это вероятный ответ, даже если подробности не указаны в вашем вопросе:

Весьма вероятно, что что-то в вашем конвейере преднамеренно создает поля с текстом с префиксом длины, а не с необработанным неструктурированным текстом. \x103189069486778499 - это двоичный байт со значением 16 (0x10), за которым следуют ровно 16 символов. 0. перед тем, как он может быть из предыдущего вывода, или какая-то другая часть любого используемого пользователем формата сериализации данных.

Этот дизайн обычно предназначен для повышения эффективности анализа;если вы используете символ разделителя между полями (например, запятую, например, CSV), вы застряли, пытаясь найти способы экранировать или заключить в кавычки разделитель, когда он встречается в ваших реальных данных, и анализаторы должны сканировать символ за символом, с учетомвыяснить, где поле начинается и заканчивается. С текстом с префиксом длины парсер находит длину поля и точно знает, сколько символов нужно прочитать, чтобы обойти поле, или сколько пропустить, чтобы найти следующее поле, без кавычек или экранирования, независимо от того, что поле содержит.

Что касается того, что делает это: вам нужно будет проверить команды в вашем конвейере. Ваш вопрос не дает значимого способа определить причину этой проблемы.

...