首页 > 解决方案 > 处理 CSV 文件中的空数字单元格的正确方法

问题描述

我正在通过编写自己的 CSV 导入方法(在 c# btw 中)从商业测量处理软件中读取 CSV 文件。内容有点奇怪,在应该有数值的地方出现了许多间歇性的空单元格。像这样:

时间 [s] ; 速度 [m/s] ; 距离[米];X [m/s²] ; Y [m/s²] ; Z [m/s²] ; Zext [m/s²] ;

0,100000 ; 0,000000 ; 0,000000 ; 0,004023 ; 0,009220 ; -0,007959 ; 0,035353 ;

0,100167 ; ; ; ; ; ; -0,021732 ;

0,100333 ; ; ; ; ; ; -0,003706 ;

0,100500 ; ; ; ; ; ; 0,041362;

0,100667;; ; ; ; ; 0,035353 ;

0,100833 ; ; ; ; ; ; 0,044366;

0,101000 ; 0,000000 ; 0,000000 ; -0,003253 ; 0,000765;0,003821;0,008312;

0,101167;; ; ; ; ; -0,006710 ;

0,101333 ; ; ; ; ; ; -0,027741 ;

等等...

CSV 是否有任何约定,规定在相应列为数字时如何处理缺失值?

对我来说,从特定的实验环境中很明显,缺失值应该是恒定的(即保持在该列中的最后一个有效值),但是当我为 CSV 编写通用导入过滤器时,我想安全地假设来自不同来源的 CSV总是如此。

那么时间列/横坐标呢:如果它们丢失了一些值,保持它们不变是没有意义的(因为我不确定横坐标总是在第一列,我不知道是什么保持不变!)...

否则,我会问自己,一个商业包怎么能扔掉这样一个定义不明确的 CSV 文件垃圾。

PS:抱歉,如果 c# 标签错误,这只是我正在编码的语言,但它与问题没有直接关系。如果不需要,可以删除。

标签: c#csv

解决方案


通过编写我自己的 CSV 导入方法

不要那样做?有多个库可以为您做到这一点,每个库都比您手动编写的代码要好,因为它们在经验、测试和实际使用方面拥有多年的经验。

从具体的实验背景来看,缺失值应该是常数是相当明显的

这与 CSV 无关。这是您的程序逻辑。您的数据格式定义了您的值丢失。这就是普通的 CSV 阅读器将为您做的事情。您的业​​务逻辑可能是将缺失值替换为其最后一个已知值。

所以你需要把它放在程序的两个不同部分。数据导入(csv读取)和业务逻辑。


推荐阅读