如何将多份教学评估CSV文件中含特定名称的变量合并为单个DataFrame
解决多列数、带教师姓名列名的评估数据合并问题
看起来你遇到的核心问题是不同文件的列结构不统一,但列名里包含了关键的教师和评估指标信息——直接强行合并肯定不行,得先把分散在不同列里的同类型数据转换成统一的结构,再合并。下面用Python的pandas给你一套可行的方案:
核心思路
我们不追求直接横向合并所有列,而是把每个文件里的目标评估指标列,转换成长格式数据(每行对应一个学生对一位教师的某一项评估),这样不管原文件列数多少,最终结构都是统一的,就能轻松合并。
具体步骤与代码
1. 导入依赖库
import pandas as pd import os import re # 可选,用于复杂列名的正则匹配
2. 定义单个文件处理函数
这个函数会读取文件,识别包含目标关键词的列,拆分出教师姓名和评估指标,把宽格式的列转换成行:
def process_eval_file(file_path, target_indicators): # 注意:你的文件是制表符分隔,所以sep='\t',不要用默认的逗号 df = pd.read_csv(file_path, sep='\t', header=0) # 保留原始列名,这是关键! processed_data = [] # 遍历每一列,筛选目标指标列 for col_name in df.columns: # --- 这里根据你的列名格式调整拆分逻辑 --- # 示例1:列名格式是「教师姓名_评估指标」(比如「张三_教学态度」) if '_' in col_name: teacher, indicator = col_name.split('_', 1) # 只拆分一次,避免指标名里有下划线 # 示例2:如果列名是「张三-教学满意度评分」,用正则匹配 # else: # match = re.match(r'(.*?)-(.*)', col_name) # if not match: # continue # 跳过不符合格式的列 # teacher, indicator = match.groups() # 检查当前列是否是我们要提取的目标指标 if any(indicator_key in indicator for indicator_key in target_indicators): # 把该列的每一行数据转换成统一格式的字典 for idx, score in df[col_name].items(): processed_data.append({ '教师姓名': teacher, '评估指标': indicator, '学生评分': score, '数据来源文件': os.path.basename(file_path) # 可选,方便追溯数据来源 }) return pd.DataFrame(processed_data)
3. 批量处理所有文件并合并
# 第一步:设置你要提取的评估指标关键词(比如你关心教学态度、满意度等) target_indicators = ['教学态度', '教学满意度', '课程实用性'] # 第二步:准备所有评估文件的路径列表 # 如果你有一个文件夹里全是这类文件,可以用os.listdir遍历: # eval_folder = './评估数据文件夹' # eval_files = [os.path.join(eval_folder, f) for f in os.listdir(eval_folder) if f.endswith('.tsv') or f.endswith('.csv')] # 或者手动指定文件: eval_files = ['班级1评估.tsv', '班级2评估.tsv', '班级3评估.tsv'] # 第三步:批量处理并合并 final_df = pd.DataFrame() for file in eval_files: print(f'正在处理文件:{file}') file_df = process_eval_file(file, target_indicators) final_df = pd.concat([final_df, file_df], ignore_index=True) # 查看合并后的结果 print(final_df.head()) # 保存结果到新文件 final_df.to_csv('合并后的评估数据.csv', index=False, encoding='utf-8-sig')
关键注意事项
- 列名格式适配:一定要根据你实际的列名格式调整拆分逻辑(比如示例里的下划线拆分、正则匹配),这是成功的关键。
- 制表符分隔:读取文件时必须指定
sep='\t',因为你的文件实际是制表符分隔的,不是逗号分隔的CSV。 - 跳过无效列:如果有些列不符合格式(比如没有教师姓名),函数里的逻辑会自动跳过这些列,不会影响最终结果。
这样处理后,你就能得到一个结构统一的DataFrame,所有目标评估指标的数据都整合在一起,方便后续分析。
内容的提问来源于stack exchange,提问作者JLC
相关产品推荐
相关产品推荐

