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

基于Python导入多CSV文本文件构建统一高管薪酬数据库技术问询

解决CSV导入与高管薪酬数据表统一方案

一、先处理带表名标识的CSV文件

从PDF导出的CSV常把表名单独放在一行,得先过滤该行,同时把表名存为额外字段方便溯源:

  • 遍历目标文件夹下的所有CSV,逐行读取判断:若某行不含CSV分隔符(逗号)或带“表”字后缀,判定为表名
  • 提取表名后跳过该行,将剩余有效数据行读成DataFrame,顺便从文件名提取公司名称作为固定字段
  • 代码示例:
import pandas as pd
import os
from io import StringIO

def parse_csv_with_table_info(file_path):
    table_name = None
    data_lines = []
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            clean_line = line.strip()
            # 可根据实际CSV格式调整表名判断规则
            if ',' not in clean_line or clean_line.endswith('表'):
                table_name = clean_line
                continue
            data_lines.append(line)
    # 用StringIO把数据行转成可读取的对象
    df = pd.read_csv(StringIO(''.join(data_lines)))
    # 从文件名提取公司名(假设文件名是「XX公司.csv」格式)
    df['company'] = os.path.basename(file_path).rstrip('.csv')
    if table_name:
        df['source_table'] = table_name
    return df

二、统一表头合并所有数据

收集所有处理后的DataFrame,用pd.concat自动处理表头差异——相同表头自动合并,不同表头直接新增列:

  • 先把所有CSV解析成DataFrame存入列表
  • 合并时设置ignore_index=True重置索引,sort=False保留列的原始顺序
  • 可选:手动统一同义表头(比如把「姓名」「高管姓名」都改成「executive_name」)
  • 代码示例:
# 指定CSV文件夹路径
csv_folder = './your_csv_dir'
all_dfs = []

for file in os.listdir(csv_folder):
    if file.endswith('.csv'):
        full_path = os.path.join(csv_folder, file)
        df = parse_csv_with_table_info(full_path)
        all_dfs.append(df)

# 合并所有DataFrame,自动处理表头差异
final_df = pd.concat(all_dfs, ignore_index=True, sort=False)

# 手动统一同义表头(根据实际收集到的表头补充)
header_unify_map = {
    '姓名': 'executive_name',
    '高管姓名': 'executive_name',
    '年薪': 'annual_salary',
    '年度总薪酬': 'annual_salary',
    '绩效奖金': 'bonus',
    '奖金': 'bonus'
}
final_df.rename(columns=header_unify_map, inplace=True)

三、写入数据库

以SQLite为例,把合并后的DataFrame存入数据库:

import sqlite3

# 连接数据库(不存在则自动创建)
conn = sqlite3.connect('executive_compensation.db')
# 将数据写入数据表,若表已存在则替换
final_df.to_sql('executive_salaries', conn, if_exists='replace', index=False)
# 关闭连接
conn.close()

注意事项

  • 表名识别规则要根据实际CSV格式调整,比如如果表名固定在第一行,直接跳过第一行即可
  • 表头映射字典需要根据收集到的所有CSV表头补充,确保所有同义字段统一成标准名称
  • 如果CSV有编码错误,尝试把open时的encoding改成gbk或者utf-8-sig

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:58:34