代码之家  ›  专栏  ›  技术社区  ›  Bending Rodriguez

配置Sweetviz以分析对象类型列而不进行转换

  •  1
  • Bending Rodriguez  · 技术社区  · 2 年前

    考虑以下简短的数据帧示例:

    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
    

    现在,我想在此数据集上运行sweetviz,以获得列及其数据的报告:

    import sweetviz as sv
    report = sv.analyze(df)
    report.show_notebook()
    

    问题是,Sweetviz似乎意识到我的column3主要是数字,尽管它是object类型的。现在它不是生成报告,而是给出以下建议:

         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将column3视为文本,并忽略在sweetvi兹中实现的类型检测。

    不幸的是,我得到了同样的建议,将列转换为数字,并将字符串值转换为NaN。

    我还尝试了column3 skip、force_cat、force_num的其他可能参数。 force_cat、force_num对导致相同结果毫无帮助。 Skip在报告中省略了第3列,这也不是一个解决方案。

    有什么方法可以迫使sweetviz保持对象类型column3的原样并对其进行分析?

    1 回复  |  直到 2 年前
        1
  •  1
  •   mozway    2 年前

    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()