Рассмотрим следующий короткий пример фрейма данных:
df = pd.DataFrame({'column1': [2, 4, 8, 0],
'column2': [2, 0, 0, 0],
'column3': ["test", 2, 1, 8]})
df.dtypes показывает, что типы данных столбцов:
column1 int64
column2 int64
column3 object
Очевидно, что столбец3 имеет тип объекта, поскольку внутри него содержатся значения смешанных типов.
Теперь я хотел бы запустить Sweetviz над этим примером набора данных, чтобы создать отчет по столбцам и их данным:
import sweetviz as sv
report = sv.analyze(df)
report.show_notebook()
Проблема в том, что Sweetviz, кажется, понимает, что мой столбец3 в основном состоит из чисел, хотя он имеет тип объекта. Теперь он не генерирует отчет, а вместо этого выдает следующее предложение:
Convert series [column3] to a numerical value (if makes sense):
One way to do this is:
df['column3'] = pd.to_numeric(df['column3'], errors='coerce')
К сожалению, для моего варианта использования это не вариант, поскольку я хочу, чтобы в отчете также выделялись неправильно используемые столбцы в моих данных, поэтому я хочу рассматривать столбец как объект, даже если только небольшая часть значений не является числами.
Я поигрался с параметрами, которые предоставляет Sweetviz:
feature_config = sv.FeatureConfig(force_text=['column3'])
report = sv.analyze(df)
report.show_notebook()
Например, я бы ожидал, что Sweetviz с этой конфигурацией будет обрабатывать столбец 3 как текст и игнорировать обнаружение типа, реализованное в Sweetviz.
К сожалению, я получаю то же предложение преобразовать столбец в числовой и преобразовать строковые значения в NaN.
Я также попробовал другие возможные параметры для пропуска столбца3, Force_cat, Force_num. Force_cat, Force_num вообще не помогают, приводя к тому же результату. Пропустить оставляет столбец3 в отчете, что также не является решением.
Есть ли способ заставить Sweetviz оставить столбец3 с объектным типом как есть и проанализировать его? Может ли кто-нибудь подтвердить, что это функция Sweetviz для проверки типов данных значений столбцов?






object неоднозначен, у вас может быть столбец объекта и только целые числа в нем. Похоже, что Sweetviz выполняет несколько «умных» проверок, пытаясь проверить/вывести типы данных.
Я бы предложил явно преобразовать в категорию:
import sweetviz as sv
report = sv.analyze(df.astype({'column3': 'category'}))
report.show_notebook()
или для строки:
import sweetviz as sv
report = sv.analyze(df.astype({'column3': 'str'}))
report.show_notebook()
Спасибо, это действительно прагматичное решение. Мне все еще интересно, есть ли возможность отключить это в Sweetviz