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

Python读取多表头可变列CSV并按Method拆分补零

我来帮你搞定这个合并CSV拆分的需求,下面是一个实用的Python解决方案,完全匹配你的要求:

解决方案思路

  1. 先把原始CSV里的多个迷你表格拆分出来——每个迷你表格都是以ID Method开头的行作为表头,后面跟着对应的数据行。
  2. 把每个迷你表格转换成DataFrame,然后按Method列的值(Soil/Datas)分类收集。
  3. 对同一Method下的所有表格进行合并,统一所有出现过的列,缺失的列值用0填充。
  4. 最后把合并后的结果分别保存成两个独立的CSV文件。

完整代码

import pandas as pd
import io

# ---------------------- 配置部分 ----------------------
# 替换成你的原始CSV文件路径
input_file_path = "your_input.csv"
# -----------------------------------------------------

# 读取原始文件内容
with open(input_file_path, 'r') as f:
    raw_data = f.read()

# 分割原始数据为多个独立的子表格
tables = []
current_table = []
for line in raw_data.split('\n'):
    line = line.strip()
    if not line:
        continue
    # 识别表头行(以"ID Method"开头)
    if line.startswith('ID Method'):
        if current_table:
            tables.append(current_table)
            current_table = []
        current_table.append(line)
    else:
        current_table.append(line)
# 添加最后一个未处理的子表格
if current_table:
    tables.append(current_table)

# 按Method分类存储DataFrame
method_dfs = {'Soil': [], 'Datas': []}

for table in tables:
    # 将子表格内容转为DataFrame(如果是逗号分隔CSV,把sep='\s+'改成sep=',')
    df = pd.read_csv(io.StringIO('\n'.join(table)), sep='\s+')
    # 获取当前表格的Method类型(假设每个子表格所有行属于同一Method)
    current_method = df['Method'].iloc[0]
    method_dfs[current_method].append(df)

# 合并同一Method的表格并输出
for method, dfs in method_dfs.items():
    if not dfs:
        print(f"未找到{method}类型的数据")
        continue
    # 合并所有表格,缺失列填充0
    merged_df = pd.concat(dfs, ignore_index=True).fillna(0)
    # 将数值列转为整数(保持和原始数据一致的类型)
    for col in merged_df.columns[2:]:
        merged_df[col] = merged_df[col].astype(int)
    # 保存为CSV文件
    output_path = f"{method}_output.csv"
    merged_df.to_csv(output_path, index=False)
    print(f"✅ {method}类型数据已成功导出到:{output_path}")

代码解释

  1. 分割子表格:遍历原始文件的每一行,遇到表头行就把之前累积的行作为一个完整子表格保存,确保每个迷你表格被单独处理。
  2. 读取为DataFrame:用pandas的read_csv读取每个子表格,这里用sep='\s+'适配你示例中的空格分隔格式,如果你的实际CSV是逗号分隔,改成sep=','即可。
  3. 分类收集:每个子表格的所有行都属于同一个Method,所以提取第一行的Method值,把DataFrame放到对应列表里。
  4. 合并与填充:用pd.concat合并同一Method的所有表格,fillna(0)自动给缺失的列填充0,最后把数值列转为整数,保证输出格式和示例一致。

注意事项

  • 如果你的原始CSV有特殊分隔符(比如制表符),请调整sep参数的值(制表符用sep='\t')。
  • 代码会自动处理原始文件中的空行,无需提前清理。
  • 输出的CSV会包含所有在原始数据中出现过的列,缺失值统一填充为0,完全匹配你给出的目标示例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:13