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

Python实现重复与非重复行转表头并保留对应数据

解决方案:CSV数据结构转换实现

问题分析

原始CSV以「键-类型」行开头,后续是多组列值(每组4行),最后追加额外「键-值」行;需要将其转换为列名对应原始键,每行对应类型+各组值的结构。

Pandas 实现方案

利用Pandas的行索引和数据构造能力快速实现转换:

import pandas as pd

# 读取CSV,处理逗号后空格
df = pd.read_csv('input.csv', header=None, skipinitialspace=True)

# 提取主键与类型(第一行数据)
main_key, main_type = df.iloc[0]

# 按每4行一组,提取3组A-D的数值数据
groups = [df.iloc[1+i*4 : 1+(i+1)*4] for i in range(3)]

# 提取末尾的额外键值对
extra_key, extra_value = df.iloc[-1]

# 构造结果列名
columns = [main_key] + groups[0][0].tolist() + [extra_key]

# 构造每行数据:类型 + 对应组数值 + 额外值
data_rows = [[main_type] + group[1].tolist() + [extra_value] for group in groups]

# 生成结果DataFrame并输出
result_df = pd.DataFrame(data_rows, columns=columns)
print(result_df.to_string(index=False))

纯Python 实现方案(无需第三方库)

如果不想依赖Pandas,可直接用Python原生处理:

# 读取并解析CSV内容
with open('input.csv', 'r') as f:
    lines = [line.strip().split(', ') for line in f if line.strip()]

# 提取主键、类型与额外键值
main_key, main_type = lines[0]
extra_key, extra_value = lines[-1]

# 分组提取A-D的数值数据
groups = [lines[1+i*4 : 1+(i+1)*4] for i in range(3)]

# 构造列名与数据行
columns = [main_key] + [item[0] for item in groups[0]] + [extra_key]
data_rows = [[main_type] + [item[1] for item in group] + [extra_value] for group in groups]

# 计算列宽,格式化对齐输出
max_col_widths = [
    max(len(str(col)), max(len(str(row[i])) for row in data_rows))
    for i, col in enumerate(columns)
]

# 打印表头
print(' '.join(f"{col:<{max_col_widths[i]}}" for i, col in enumerate(columns)))
# 打印数据行
for row in data_rows:
    print(' '.join(f"{val:<{max_col_widths[i]}}" for i, val in enumerate(row)))

输出效果

运行后会生成符合需求的格式化输出:

cat        A      B      C      D      blue
animal    5000   6000   8000   6000   color
animal    3000   2000   6000   1000   color
animal    4000   1000   1000   3000   color

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:15:06