Несоответствие числовых значений из CSV-файла в Dataprep

Я изо всех сил пытаюсь понять, почему Dataprep присваивает несовпадающие значения числовым значениям, которые я пытаюсь импортировать из файла .csv.

В моем excel все выглядит нормально:

введите здесь описание изображения

но в dataprep это значение, которое я получаю:

введите здесь описание изображения

Кажется, для большинства чисел выше 1000.

Как я могу предотвратить это? Я сохранил файл как .csv


person JohnAndrews    schedule 04.04.2019    source источник


Ответы (1)


Скорее всего, это связано с исходным форматированием в Excel (в частности, форматы чисел «Учет» и «Стиль запятой» делают это, потому что он выравнивает символ валюты или знак как часть форматирования). В этих случаях вы также заметите, что вставка из Excel включает начальный и конечный пробельные символы.

Dataprep не тратит слишком много времени на размышления за вас — в этом случае они придерживаются консервативной точки зрения, предоставляя вам необработанные данные и позволяя вам решить, нужно ли вам их переформатировать.

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

К счастью, это легко исправить. Вам также придется заменить запятые, если вы хотите использовать десятичный тип.


Простые замены:

Интерфейс:

  1. Формат > Обрезать начальные и конечные кавычки
  2. Формат > Обрезать начальные и конечные пробелы
  3. «Заменить» > «Текст или шаблон» (замените «,»; убедитесь, что вы установили флажок «Соответствовать всем вхождениям»

Результирующий скрипт Wrangle:

textformat col: col1 type: trimquotes
textformat col: col1 type: trimwhitespace
replacepatterns col: col1 with: '' on: ',' global: true

Регулярное выражение (одноэтапная замена):

replacepatterns col: col1 with: '' on: /[^0-9.]/ global: true

В смешанной команде с людьми, которые не знают регулярных выражений, первое иногда немного понятнее и менее пугающее, но в остальном его намного проще сделать за один шаг.

person justbeez    schedule 04.04.2019
comment
Да, это имеет смысл. Где вы замените это в dataprep новым правилом? Когда я открыл файл .csv, я заметил, что у меня нет «,», а иногда просто пробел. - person JohnAndrews; 05.04.2019
comment
@JohnAndrews Да, вы можете поместить это как новые шаги в свой рецепт. Удобный трюк Dataprep заключается в том, что вы можете нажать кнопку «Новый шаг», а затем вставить скрипт (по одной строке за раз), и он сделает все те же выборы за вас. Это также работает из интерфейса — в меню для любого шага вы можете щелкнуть «копировать в буфер обмена», а затем сделать то же самое, что сэкономит много времени, если вам нужно повторно использовать или изменить порядок шагов. В этом случае вам просто нужно изменить имя столбца, и тогда все будет хорошо. Если все это работает для вас, обязательно отметьте ответ как принятый. - person justbeez; 05.04.2019
comment
Вы рекомендуете эту фильтрацию в начале рецепта? - person JohnAndrews; 05.04.2019
comment
@JohnAndrews Я обычно делаю это довольно рано, поэтому мне не нужно учитывать это в будущих шагах. Это вряд ли сильно повлияет на производительность, если вы не имеете дело с очень большими наборами данных. Обычно я стараюсь использовать следующий порядок для повышения производительности и возможности повторного использования (тем более, что наша команда часто копирует старые рецепты в качестве отправной точки): 1. Отбрасывать ненужные столбцы 2. При необходимости объединять/объединять 3. Отфильтровывать ненужные строки 4. Переименовывать столбцы 5. Обрезать кавычки/пробелы и заменить отсутствующие на NULL (вы можете заменить на *, чтобы сделать все столбцы одновременно) 6. Другие споры с данными 7. Исправление неправильных типов - person justbeez; 05.04.2019