将文件加载到 Orange 时克服“数组索引过多”错误

数据挖掘 橘子
2021-10-08 15:08:03

我正在尝试将Stack Overflow 2017 开发人员调查结果加载到 Orange 中。该数据集有约 51.4K 行和 156 个特征。它以逗号分隔,大小约为 91MB。

当我尝试将此文件加载到 Orange 中时,出现以下错误:

Cannot parse dataset H:/survey_results_public.csv: too many indices for array

我该如何克服这个错误?

3个回答

此错误基本上意味着您的数据格式不正确,Orange 无法读取它。某处要么存在冗余列分隔符,要么可能不存在。无论哪种方式,您都应该仔细检查所有列是否由制表符或任何其他一致的分隔符正确分隔。

我有同样的问题,也试图读取 .csv 文件。尽管@minerals 的答案在技术上是正确的,但它假定您的 .csv 文件格式不正确。

就我而言,csv 文件具有正确数量的索引,并且被验证为未损坏(使用免费软件“CSVed”)。我能够通过将 csv 保存为 .xlsx (Microsoft Excel) 来加​​载我的数据框。它加载得很好。有趣的是,导出回 .csv 会重新创建错误!

几个月后,在为同样的任务苦苦挣扎之后,我设法加载了它!

TLDR 版本:

用无害的东西(即')替换文件中值中的所有双双引号(“”)。Orange 然后设法加载它。

解释:

“CodesInChaos”的评论确实指向了正确的方向:这是解析引用值的错误(在 Orange 或它使用的某些库中)。具体来说,它不能正确处理列值内正确转义的双引号。

RFC 4180 说:

如果使用双引号将字段括起来,则出现在字段内的双引号必须通过在其前面加上另一个双引号来进行转义。

但是,在文件中发生这种转义会导致观察到 Orange 中的错误。

注意:在一般情况下,仔细、简单的搜索和替换可能不会削减它 - 如果值本身以双引号开头,则将 """ 替换为 '",这将产生无效的 csv。

另请注意Weka似乎也有这个限制。此外,它不容忍引用值内的换行符 - 根据 RFC,这再次是有效的。

故事的寓意CSV 解析并不容易