在 C++ 中读取 csv 文件时如何处理 NaN

发布于 2024-09-13 17:24:01 字数 262 浏览 20 评论 0原文

我正在将时间序列数据的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

靑春怀旧 2024-09-20 17:24:01

正如 David Given 已经提到的,您根本不必预处理文件。 strtof() 和 strtod() 都能够将 NaN 字符串转换为 NaN float/double 值。

如果您想将数据集中的值替换为 0.0,可以使用 isnan() 函数来执行此操作。

if (isnan(val))
{
    val = 0.0;
}

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.

if (isnan(val))
{
    val = 0.0;
}
深府石板幽径 2024-09-20 17:24:01

您希望结果为浮点(或双精度)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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文