如何在Pandas中按行列对应拼接多CSV文件的单元格字符串
Pandas实现多CSV文件同位置字符串拼接
需求说明
现有文件夹内多个CSV文件,行列结构完全一致,单元格均为字符串,需要将对应位置的单元格字符串拼接(示例中用空格分隔,可按需调整),最终生成一个新的DataFrame,而非新增行/列。
解决方案
以下提供两种高效实现方式,均基于Pandas完成:
方法一:使用reduce逐次合并DataFrame
适合需要单独处理特定列(如示例中第一列无需重复拼接)的场景:
import pandas as pd import os from functools import reduce # 1. 配置文件夹路径,获取所有CSV文件 csv_dir = "./your_csv_folder/" csv_paths = [os.path.join(csv_dir, f) for f in os.listdir(csv_dir) if f.lower().endswith(".csv")] # 2. 批量读取所有CSV到DataFrame列表 df_collection = [pd.read_csv(path, index_col=False) for path in csv_paths] # 3. 定义拼接逻辑:逐列合并对应单元格字符串 def merge_dfs(df_a, df_b): # 遍历所有列,第一列保留原始值(按需修改),其他列拼接字符串 for col in df_a.columns: if col != df_a.columns[0]: # 用空格分隔,无需分隔符则改为 df_a[col] + df_b[col] df_a[col] = df_a[col] + " " + df_b[col] return df_a # 4. 合并所有DataFrame final_df = reduce(merge_dfs, df_collection) # 5. 保存结果 final_df.to_csv("concatenated.csv", index=False)
方法二:使用concat+groupby批量拼接
代码更简洁,适合所有列都需要拼接的场景,若需保留特定列可后续调整:
import pandas as pd import os # 1. 获取CSV文件路径并读取 csv_dir = "./your_csv_folder/" csv_paths = [os.path.join(csv_dir, f) for f in os.listdir(csv_dir) if f.lower().endswith(".csv")] df_collection = [pd.read_csv(path, index_col=False) for path in csv_paths] # 2. 堆叠所有DataFrame,按原行索引分组拼接 stacked_dfs = pd.concat(df_collection, keys=range(len(df_collection))) # 按原行分组,对每组内的字符串拼接(空格分隔,可改为''实现无分隔符) final_df = stacked_dfs.groupby(level=1).agg(lambda x: " ".join(x)) # (可选)若第一列无需拼接,替换为第一个DataFrame的第一列 final_df.iloc[:, 0] = df_collection[0].iloc[:, 0] # 3. 保存结果 final_df.to_csv("concatenated.csv", index=False)
关键说明
- 若不需要空格分隔,将代码中的
" "替换为空字符串""即可实现纯字符串拼接 - 确保所有CSV文件的列名、行顺序完全一致,否则会导致拼接错位
- 若CSV文件有自定义表头或索引,需调整
pd.read_csv的参数(如header=0或index_col=0)适配你的文件结构
内容的提问来源于stack exchange,提问作者Bartholomaios
相关产品推荐
相关产品推荐

