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

使用Python拆分CSV文件含子项的列至2-3列的技术求助

解决CSV中分号分隔内容列的拆分问题

方法一:使用Pandas(推荐,简洁高效)

代码实现

import pandas as pd

# 读取CSV文件,指定分号为列分隔符,解析带引号的含分隔符单元格
df = pd.read_csv('input.csv', sep=';', quotechar='"')

# 拆分"Intakt inkl moms"列,按分号分割并扩展为多列
split_intakt = df['Intakt inkl moms'].str.split(';', expand=True)
# 给拆分后的列重命名,避免默认数字表头
split_intakt.columns = [f'Intakt inkl moms_{i+1}' for i in split_intakt.columns]

# 拆分"Artikelnummer1/2"列,逻辑同上
split_artikel = df['Artikelnummer1/2'].str.split(';', expand=True)
split_artikel.columns = [f'Artikelnummer_{i+1}' for i in split_artikel.columns]

# 合并原有列(移除已拆分的列)和拆分后的新列
result_df = pd.concat([df.drop(['Intakt inkl moms', 'Artikelnummer1/2'], axis=1), split_intakt, split_artikel], axis=1)

# 保存处理后的CSV,保留分号分隔和引号包裹格式
result_df.to_csv('output.csv', sep=';', index=False, quotechar='"')

关键说明

  • sep=';':匹配CSV文件的列分隔符为分号
  • quotechar='"':正确解析单元格内包含分号的带引号内容
  • str.split(';', expand=True):将单个单元格的分号分隔内容拆分为独立列
  • pd.concat():确保原有非拆分列的数据不会丢失

方法二:使用Python原生CSV模块(无需第三方库)

代码实现

import csv

input_file = 'input.csv'
output_file = 'output.csv'

# 先读取所有数据,确定拆分列的最大拆分数量
with open(input_file, 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f, delimiter=';', quotechar='"')
    rows = list(reader)
    original_headers = reader.fieldnames
    cols_to_split = ['Intakt inkl moms', 'Artikelnummer1/2']
    
    # 统计每个拆分列的最多值数量,保证输出列数统一
    max_split_counts = {}
    for col in cols_to_split:
        max_count = max(len(row[col].split(';')) for row in rows)
        max_split_counts[col] = max_count
    
    # 构建输出文件的表头
    new_headers = [h for h in original_headers if h not in cols_to_split]
    for col in cols_to_split:
        new_headers.extend([f'{col}_{i+1}' for i in range(max_split_counts[col])])

# 写入处理后的CSV文件
with open(output_file, 'w', encoding='utf-8', newline='') as f:
    writer = csv.DictWriter(f, fieldnames=new_headers, delimiter=';', quotechar='"')
    writer.writeheader()
    
    for row in rows:
        new_row = {h: row[h] for h in original_headers if h not in cols_to_split}
        # 处理每个需要拆分的列,填充空值保证列数一致
        for col in cols_to_split:
            split_vals = row[col].split(';')
            split_vals += [''] * (max_split_counts[col] - len(split_vals))
            for i, val in enumerate(split_vals):
                new_row[f'{col}_{i+1}'] = val
        writer.writerow(new_row)

关键说明

  • 先遍历所有行统计最大拆分数量,避免出现行与列数不匹配的问题
  • 手动填充空值,保证输出CSV的格式规范
  • 完全依赖Python标准库,无需额外安装依赖包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:46:18