数据类型识别/猜测python中的CSV数据

poe*_*ezn 17 python csv algorithm schema heuristics

我的问题是处理来自大型CSV文件的数据.

我正在寻找最有效的方法来确定(即猜测)列的数据类型,基于该列中找到的值.我可能正在处理非常混乱的数据.因此,该算法在某种程度上应该是容错的.

这是一个例子:

arr1 = ['0.83', '-0.26', '-', '0.23', '11.23']               # ==> recognize as float
arr2 = ['1', '11', '-1345.67', '0', '22']                    # ==> regognize as int
arr3 = ['2/7/1985', 'Jul 03 1985, 00:00:00', '', '4/3/2011'] # ==> recognize as date
arr4 = ['Dog', 'Cat', '0.13', 'Mouse']                       # ==> recognize as str
Run Code Online (Sandbox Code Playgroud)

底线:我正在寻找一个可以检测的python包或算法

  • CSV文件的架构,甚至更好
  • 将单个列的数据类型作为数组

用于猜测当前表示为字符串的数据类型的方法在类似的方向上进行.不过,我担心性能,因为我可能正在处理许多大型电子表格(数据源于此)

Ruf*_*ock 13

您可能对这个python库感兴趣,它可以为您完成这种类型的CSV和XLS文件猜测:

它很高兴扩展到非常大的文件,从互联网上流式传输数据等.

还有一个更简单的包装器库,其中包含一个名为dataconverters的命令行工具:http://okfnlabs.org/dataconverters/ (和一个在线服务:https://github.com/okfn/dataproxy!)

进行类型猜测的核心算法如下:https://github.com/okfn/messytables/blob/7e4f12abef257a4d70a8020e0d024df6fbb02976/messytables/types.py#L164


poe*_*ezn 6

在考虑之后,这就是我自己设计算法的方法:

  • 出于性能原因:为每列提取样本(例如,1%)
  • 为示例中的每个单元格运行正则表达式匹配,检查数据类型
  • 根据频率分布为列选择适当的数据类型

出现的两个问题:

  • 什么是足够的样本量?对于小数据集?对于大型数据集?
  • 根据频率分布选择数据类型的阈值是多少?