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

使用Pandas转置列并整理非结构化CSV文件

处理格式混乱的CSV文件,提取固定索引的目标信息

针对你这种冗余列数量不定但目标列索引固定的CSV处理需求,用Python的pandas库可以轻松搞定,下面是具体的实现方案,完全贴合你的示例需求:

核心思路

  1. 读取CSV时不预设表头(因为第一行包含冗余信息);
  2. 从固定索引位置提取公司名称、指标名称(如VisitsMay)和分类名称(如International);
  3. 重新构造符合要求的表格结构,将原表的"指标列"转成新表的"行",并匹配对应分类的数值。

单文件处理代码

import pandas as pd

# 读取CSV文件,注意不要设置header,保留所有原始行
df = pd.read_csv('your_input_file.csv', header=None)

# ---------------------- 这里根据你的实际固定索引调整 ----------------------
# 示例中公司名在第7列(索引从0开始是6),格式为"Companyname: Apple"
company_col_index = 6
# 示例中指标列从第8列开始(索引7)
metrics_start_index = 7
# 示例中分类名称在第6列(索引5)
category_col_index = 5
# -----------------------------------------------------------------------

# 提取公司名称
company_name = df.iloc[0, company_col_index].split(': ')[1]

# 提取所有指标名称(如VisitsMay、ImpressionsMay)
metrics = df.iloc[0, metrics_start_index:].tolist()

# 提取每个分类对应的指标数值
category_data = []
for row_idx in range(1, len(df)):  # 跳过第一行的冗余表头
    category_name = df.iloc[row_idx, category_col_index]
    metric_values = df.iloc[row_idx, metrics_start_index:].tolist()
    category_data.append((category_name, metric_values))

# 构造目标格式的行数据
output_rows = []
for metric in metrics:
    # 每行开头是公司名+指标名
    current_row = [company_name, metric]
    # 依次添加每个分类对应的数值
    for cat_name, cat_values in category_data:
        current_row.append(cat_values[metrics.index(metric)])
    output_rows.append(current_row)

# 创建结果DataFrame并保存
output_columns = ['Companyname', 'Month'] + [cat[0] for cat in category_data]
result_df = pd.DataFrame(output_rows, columns=output_columns)
result_df.to_csv('your_output_file.csv', index=False)

多批量处理代码

如果你有大量CSV需要处理,可以用循环遍历文件夹下的所有CSV文件:

import pandas as pd
import os

# 替换成你的CSV文件夹路径
input_folder = 'path/to/your/csv/folder'
output_folder = 'path/to/save/processed/files'

# 创建输出文件夹(如果不存在)
os.makedirs(output_folder, exist_ok=True)

# ---------------------- 同样根据实际索引调整这里的数值 ----------------------
company_col_index = 6
metrics_start_index = 7
category_col_index = 5
# -----------------------------------------------------------------------

for filename in os.listdir(input_folder):
    if filename.endswith('.csv'):
        input_path = os.path.join(input_folder, filename)
        df = pd.read_csv(input_path, header=None)
        
        # 提取公司名
        try:
            company_name = df.iloc[0, company_col_index].split(': ')[1]
        except IndexError:
            print(f"跳过文件 {filename}:未找到指定索引的公司名列")
            continue
        
        # 提取指标和分类数据
        metrics = df.iloc[0, metrics_start_index:].tolist()
        category_data = []
        valid_rows = True
        for row_idx in range(1, len(df)):
            try:
                category_name = df.iloc[row_idx, category_col_index]
                metric_values = df.iloc[row_idx, metrics_start_index:].tolist()
                category_data.append((category_name, metric_values))
            except IndexError:
                valid_rows = False
                break
        
        if not valid_rows:
            print(f"跳过文件 {filename}:部分行数据不完整")
            continue
        
        # 构造输出数据
        output_rows = []
        for metric in metrics:
            current_row = [company_name, metric]
            for cat_name, cat_values in category_data:
                current_row.append(cat_values[metrics.index(metric)])
            output_rows.append(current_row)
        
        # 保存结果
        output_columns = ['Companyname', 'Month'] + [cat[0] for cat in category_data]
        result_df = pd.DataFrame(output_rows, columns=output_columns)
        output_path = os.path.join(output_folder, f"processed_{filename}")
        result_df.to_csv(output_path, index=False)
        print(f"已处理完成:{filename}")

关键调整说明

  • 你只需要根据真实的CSV结构,修改代码中标记的三个索引值(company_col_index、metrics_start_index、category_col_index)即可适配你的文件;
  • 如果公司名的格式不是Companyname: XXX,可以调整company_name的提取逻辑,比如直接取对应列的值;
  • 代码中加入了简单的错误处理,避免因个别文件格式异常导致整个批量处理中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:37:40