You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用read_delim导入时序CSV时列名不匹配的问题

问题分析与解决方案

问题根源

  1. 分隔符指定错误:你的CSV文件实际分隔符是;,而非带空格的;。从异常数据的列名能看出,表头是用;直接分隔的(Période;Production brute d'électricité nucléaire (en GWh)),用" ; "作为分隔符时,read_delim无法识别拆分规则,导致所有数据挤在一列,自然和你指定的列名不匹配。
  2. 列名不匹配:你在cols()里写的列名Production.brute.d.électricité.nucléaire..en.GWh.是read.csv自动将空格转成点后的结果,但read_delim会保留原始列名的空格,二者不对应触发了警告。

修正后的代码

方法一:正确指定分隔符+匹配原始列名

library(readr)

# cols里的列名要和CSV表头完全一致(保留空格)
serie_elec <- read_delim(
  file = "C:/Users/Downloads/dataset_univarie.csv",
  delim = ";",  # 修正为实际分隔符
  escape_double = FALSE,
  col_types = cols(
    `Période` = col_date(format = "%Y-%m"),
    `Production brute d'électricité nucléaire (en GWh)` = col_number()
  ),
  trim_ws = TRUE  # 可选,去除字段前后多余空格
)

# 删除不需要的行
serie_elec_clean <- serie_elec[-(504:515), ]

方法二:先导入再转换日期(更直观)

如果不想纠结列名写法,可以先导入数据,再单独处理日期列:

library(readr)
library(dplyr)

serie_elec <- read_delim(
  file = "C:/Users/Downloads/dataset_univarie.csv",
  delim = ";",
  escape_double = FALSE,
  trim_ws = TRUE
) %>%
  # 转换日期列
  mutate(Période = as.Date(Période, format = "%Y-%m")) %>%
  # 删除指定行
  slice(-(504:515))

验证结果

运行上述代码后,数据结构会和你预期的一致,第一列会被识别为日期类型,方便后续时序数据处理。

内容的提问来源于stack exchange,提问作者gerardlambert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:38:24