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

如何将多份教学评估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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:05:50