代码之家  ›  专栏  ›  技术社区  ›  Angelo

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

  •  12
  • Angelo  · 技术社区  · 7 年前

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

    然而,我这里的问题不是数据的肮脏程度,而是试图理解导致错误的解析错误 读取csv() 数据的大小使得手动方法难以处理。

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

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

    请注意,第二行的“brown”周围有虚假的引号。该内容进入一个名为“的文件” my_数据。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个字符。

    有人能告诉我如何在邮件中设置格式或换行符吗 读取csv() 所以我可以看到它是如何检测问题的?

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

    1 回复  |  直到 7 年前
        1
  •  16
  •   Angelo    7 年前

    在深吸一口气并查看实际文档后, 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'
    

    读取csv() 关联包含解析失败详细信息的TIBLE,可以通过传递 读取csv 问题() .