c# - 处理 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# 标签错误,这只是我正在编码的语言,但它与问题没有直接关系。如果不需要,可以删除。
解决方案
通过编写我自己的 CSV 导入方法
不要那样做?有多个库可以为您做到这一点,每个库都比您手动编写的代码要好,因为它们在经验、测试和实际使用方面拥有多年的经验。
从具体的实验背景来看,缺失值应该是常数是相当明显的
这与 CSV 无关。这是您的程序逻辑。您的数据格式定义了您的值丢失。这就是普通的 CSV 阅读器将为您做的事情。您的业务逻辑可能是将缺失值替换为其最后一个已知值。
所以你需要把它放在程序的两个不同部分。数据导入(csv读取)和业务逻辑。
推荐阅读
- opencv - 适用于各种光照条件的线路跟随器的 HSV 范围
- javascript - dc.js x 轴显示为十进制而不是整数
- perl - 显示代码本身的短脚本?
- r - 如何在 Keras [for R] 中提取中间层的输出?
- c# - Firestore 事件发生时更新 ObservableCollection
- excel - 使用多项选择创建多个命名范围
- php - 如何创建返回对给定用户评论的回复的 MySQL 查询
- javascript - 用于深度嵌套数据的递归 React 组件
- javascript - 使用 jQuery 创建移动菜单
- angular - Angular / 在选择时对每次更改发送另一个获取请求