考虑以下简短的数据框示例:
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
显然,column3 是对象类型,因为它内部有混合类型的值。
现在我想在此示例数据集上运行 sweetviz 以生成有关列及其数据的报告:
import sweetviz as sv
report = sv.analyze(df)
report.show_notebook()
问题是,Sweetviz似乎意识到我的column3主要是数字,即使它是对象类型。现在它不生成报告,而是给出以下建议:
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 视为文本并忽略在 sweetviz 中实现的类型检测。
不幸的是,我得到了相同的建议,将列转换为数字并将字符串值转换为 NaN。
我还尝试了column3skip、force_cat、force_num的其他可能参数。 force_cat、force_num 根本没有帮助导致相同的结果。 Skip 将第 3 列排除在报告中,这也不是解决方案。
有什么方法可以强制sweetviz保持对象类型的column3原样并进行分析吗?有人可以确认这是 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()