如何按日期列合并日期不统一的多个CSV文件并保留文件名对应极性列
问题解答
关于left_join的可行性
可以实现,但操作繁琐、效率偏低,不推荐:
- 你需要先生成包含所有CSV文件全部日期的基准全量表作为左表
- 每读取一个CSV都要单独做一次left_join,同时手动把新增的Polarity列重命名为对应文件名
- 文件数量越多,重复操作的冗余度越高,也更容易出错
更适配的实现方案
R语言(tidyverse生态)
直接用「批量读入+长宽转换」的逻辑,代码量更少、容错率更高,完全满足你列名用原文件名、缺失值留空的需求:
library(tidyverse) # 1. 读取目标文件夹下所有csv文件,同时记录文件名 csv_list <- list.files(path = "你的文件夹路径", pattern = "\\.csv$", full.names = TRUE) df_all <- map_dfr(csv_list, function(x) { read_csv(x, col_types = cols()) %>% select(Date, Polarity) %>% mutate(file_name = str_remove(basename(x), "\\.csv$")) # 去掉csv后缀当列名 }) # 2. 直接转宽格式,自动按Date对齐,缺失值自动为NA df_result <- df_all %>% pivot_wider( id_cols = Date, names_from = file_name, values_from = Polarity )
Python(pandas生态)
逻辑和R方案完全一致,适配Python使用者的习惯:
import pandas as pd import os folder_path = "你的文件夹路径" df_list = [] for file in os.listdir(folder_path): if file.endswith(".csv"): df = pd.read_csv(os.path.join(folder_path, file), usecols=["Date", "Polarity"]) df["file_name"] = file.rsplit(".", 1)[0] df_list.append(df) df_all = pd.concat(df_list, axis=0) df_result = df_all.pivot(index="Date", columns="file_name", values="Polarity").reset_index()
这个方案的优势在于不管你有多少个CSV、日期顺序多乱,都可以一次处理完成,不需要手动维护关联逻辑。
内容的提问来源于stack exchange,提问作者PlumPlum
相关产品推荐
相关产品推荐

