【发布时间】:2026-02-15 07:35:01
【问题描述】:
我一直在开发一种自动预处理 pandas.DataFrame 格式数据的工具。在这个预处理步骤中,我想以不同的方式处理连续数据和分类数据。特别是,我希望能够将 OneHotEncoder 应用到仅分类数据。
现在,假设我们提供了一个 pandas.DataFrame 并且没有关于 DataFrame 中数据的其他信息。确定 pandas.DataFrame 中的列是否是分类的有什么好的启发式方法?
我最初的想法是:
1) 如果列中有字符串(例如,列数据类型为object),则该列很可能包含分类数据
2) 如果列中某些百分比的值是唯一的(例如 >=20%),则该列很可能包含连续数据
我发现1) 工作正常,但2) 并没有很好地完成。我需要更好的启发式方法。你会如何解决这个问题?
编辑:有人要求我解释为什么2) 不能正常工作。在某些测试案例中,我们在列中仍然有连续值,但列中没有很多唯一值。在这种情况下,2) 中的启发式显然失败了。还有一个问题是,我们有一个分类列,其中包含许多独特的值,例如泰坦尼克号数据集中的乘客姓名。存在相同的列类型错误分类问题。
【问题讨论】:
-
我相信这个问题几乎是完全不确定的。世界上所有数据集的分布是什么?例如,对于邮政服务或电话簿,您的规则 1 非常失败。
-
尝试Benford's law 从分类数据中辨别数字数据。
-
@Barmaley.exe 你能详细说明一下这个想法吗?
-
@RandyOlson,好吧,我不确定它是否有效,但这个想法是“自然”数字倾向于遵守本福德定律,而分类值 (ids) 则没有to:确实,您可以任意排列 id,并且什么都不会改变。因此,您可以尝试从该定律中得出某种测试。
-
您对此有何改进?
标签: python pandas scikit-learn