gpt4 book ai didi

read_csv() 解析错误信息,如何解释?

转载 作者:行者123 更新时间:2023-12-04 03:25:36 28 4
gpt4 key购买 nike

我正在解析大量 csv 数据。数据相当“脏”,因为我有不一致的分隔符、虚假字符和格式问题,这些问题会导致 出现问题。 read_csv() .

然而,我的问题不是数据的肮脏,而是试图理解 的解析错误。 read_csv() 正在给我。如果我能更好地理解错误消息,我就可以做一些清洁工作来解决脚本问题。数据的大小使手动方法变得棘手。

这是一个最小的例子。假设我有一个像这样的 csv 文件:

"col_a","col_b","col_c"
"1","a quick","10"
"2","a quick "brown" fox","20"
"3","quick, brown fox","30"

请注意,第 2 行中的“brown”周围有伪引号。此内容进入名为“ my_data.csv ”的文件。

当我尝试读取该文件时,我遇到了一些解析失败。
> library(tidyverse)
> df <- read_csv("./my_data.csv", col_types = cols(.default = "c"))
Warning: 2 parsing failures.
row # A tibble: 2 x 5 col row col expected actual file expected <int> <chr> <chr> <chr> <chr> actual 1 2 col_b delimiter or quote b './my_data.csv' file 2 2 col_b delimiter or quote './my_data.csv'

如您所见,解析失败并没有“漂亮地打印出来”。它是 271 个字符的 ONE LONG LINE。

我什至不知道在失败消息中放置换行符的位置以查看问题出在哪里以及消息试图告诉我什么。此外,它指的是“2x5 tibble”。什么梗?我的数据框是 3x3。

有人可以告诉我如何在来自 的消息中格式化或放置换行符吗? read_csv() 所以我可以看到它是如何检测问题的?

是的,我知道这个特定的最小示例中的问题是什么。在我的实际数据中,我正在处理大量的 csv(约 100 万行),其中充斥着不一致的情况,导致数百次解析失败。我想设置一个工作流来对这些进行分类并以编程方式处理它们。我认为,第一步只是了解如何“解析”解析失败消息。

最佳答案

深呼吸并查看实际文档后,I see there is a way to get the parsing failures from read_csv() in a form that is very usable .

为了解决解析失败,我所要做的就是使用 问题() .

> library(tidyverse)
> df <- read_csv("./my_data.csv", col_types = cols(.default = "c"))
Warning: 2 parsing failures.
row # A tibble: 2 x 5 col row col expected actual file expected <int> <chr> <chr> <chr> <chr> actual 1 2 col_b delimiter or quote b './my_data.csv' file 2 2 col_b delimiter or quote './my_data.csv'

> parsing_failures <- problems(df)
> parsing_failures
# A tibble: 2 x 5
row col expected actual file
<int> <chr> <chr> <chr> <chr>
1 2 col_b delimiter or quote b './my_data.csv'
2 2 col_b delimiter or quote './my_data.csv'

显然 read_csv() 关联一个包含解析失败细节的小标题,这可以通过传递来自 的结果来访问。 read_csv 问题() .

关于read_csv() 解析错误信息,如何解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46778853/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com