使用krangl读取大型CSV文件报错,小型文件正常问题求助
问题描述
刚接触Kotlin和IntelliJ Idea,此前代码运行完全正常:
import krangl.* val dataPath = "C:\\Users\\fsald\\Dropbox\\Temp\\AAPL.CSV" val dataPath1 = "C:\\Users\\fsald\\Dropbox\\Code\\Julia\\IOFiles\\Input\\AllData.CSV" fun main(args: Array<String>) { krangl.irisData.print() val data = krangl.DataFrame.readCSV(dataPath) data.print() }
上述代码中的两个DataFrame(irisData和data)均能正常打印输出。
但在main函数末尾添加读取大型CSV文件(约600列、25000行)的代码后,程序崩溃:
val data1 = krangl.DataFrame.readCSV(dataPath1)
报错信息如下:
Exception in thread "main" java.lang.NumberFormatException: invalid boolean cell value at krangl.TableIOKt.cellValueAsBoolean(TableIO.kt:336) at krangl.TableIOKt.dataColFactory(TableIO.kt:372) at krangl.TableIOKt.dataColFactory(TableIO.kt:376) at krangl.TableIOKt.readDelim(TableIO.kt:175) at krangl.TableIOKt.readDelim$default(TableIO.kt:133) at krangl.TableIOKt.readDelim(TableIO.kt:129) at krangl.TableIOKt.readCSV(TableIO.kt:43) at krangl.TableIOKt.readCSV$default(TableIO.kt:39) at MainKt.main(Main.kt:12) Process finished with exit code 1
问题原因
这个报错的核心原因是krangl的自动类型推断机制在处理大型CSV时出现了误判或转换失败:
- krangl读取CSV时会自动扫描列数据推断类型,当它判定某列可能是布尔类型时,会尝试将列中所有值转换为标准布尔值(仅识别小写的
true/false) - 你的大型CSV中,某一列存在以下情况之一:
- 列中存在非标准布尔格式的值(比如
True/FALSE大小写不对、1/0这类数值、空值或其他异常字符串) - 该列原本不是布尔列,但krangl根据前几行数据误判为布尔类型,后续出现非布尔值时转换失败
- 列中存在非标准布尔格式的值(比如
- 大型CSV列数多、数据量大,类型推断的误判概率更高,进而触发
NumberFormatException异常。
内容的提问来源于stack exchange,提问作者Soldalma
相关产品推荐
相关产品推荐

