在 C++ 中读取 csv 文件时如何处理 NaN
我正在将时间序列数据的 csv 文件读入 C++ 程序中。然而我的数据包含 一些 NaN。例如:
1-Jul-2010, 1.0
2-Jul-2010, 2.0
3-Jul-2010, NaN
4-Jul-2010, 3.0
为了解决这个问题,我在 Matlab 中编写了一个简短的脚本,它将所有 NaN 替换为 0.0 - 然后我读入没有 NaN 的新文件。有没有简单的方法或避免 这个预处理?
谢谢!
I'm reading in a csv file of time-series data into a C++ program. My data however contains
some NaN's. For example:
1-Jul-2010, 1.0
2-Jul-2010, 2.0
3-Jul-2010, NaN
4-Jul-2010, 3.0
To deal with this I wrote a short script in Matlab which replaces all the NaN's with 0.0 -
I then read in the new file without the NaN's. Is there an easy way or avoiding
this pre-processing?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如 David Given 已经提到的,您根本不必预处理文件。 strtof() 和 strtod() 都能够将 NaN 字符串转换为 NaN float/double 值。
如果您想将数据集中的值替换为 0.0,可以使用 isnan() 函数来执行此操作。
As David Given already mentioned, you do not have to pre-process the file at all. strtof() and strtod() are both able to convert the NaN string to the NaN float/double value.
If you want to replace the values with 0.0 in your dataset, you can do so using the isnan() function.
您希望结果为浮点(或双精度)NaN - 然后使用 stdlib strtod() 函数。
如果您想以自己的方式处理它(将其设置为 0 等),则首先将每一行读入字符串,使用 strcmp() 检查 NaN,然后根据您发现的内容解析字符串 - 如果 NaN 只能出现,则更容易在一列中。
Do you want the result to be a float (or double) NaN - then use the stdlib strtod() function.
If you want to deal with it in your own way (set it to 0 etc) then read each line into a string first, check for NaN with strcmp() then parse the string depending on what you find - easier if NaN can only appear in one column.