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

如何遍历CSV文件所有列计算氨基酸组成百分比?

解决CSV文件多列氨基酸组成百分比计算问题

问题描述

需要计算CSV文件中每一列的氨基酸组成百分比,但现有代码仅能处理第一列,无法遍历所有列并输出对应结果。

示例数据

Column header 95: A|T|E|A|A|Y|E|A|E|A
Column header 96: W|I|Q|Q|A|L|P|K|E|A
Column header 97: S|D|F|Q|G|Y|E|A|E|A

现有代码

import csv
with open ('test.csv', 'r') as f:
    reader = csv.reader(f)
    column = [row[0] for row in reader]
    amino_acids = {}
    for aa in column:
        if aa in amino_acids:
            amino_acids[aa] += 1
        else:
            amino_acids[aa] = 1
    for aa, count in amino_acids.items():
        #print(f'{aa}: {count}')
        percentage = count / len (column) *100
        print (f"{aa}: {percentage: .2f}%")  

预期输出

Column header 95:
A: 50.00%
E: 30.00%
T: 10.00%
Y: 10.00%
Column header 96:
A: 20.00%
Q: 20.00%
W: 10.00%
I: 10.00%
L: 10.00%
P: 10.00%
K: 10.00%
E: 10.00%
Column header 97:
A: 20.00%
E: 20.00%
S: 10.00%
D: 10.00%
F: 10.00%
Q: 10.00%
G: 10.00%
Y: 10.00%

解决方案

修改代码以遍历每一行(对应CSV中的每一列数据),拆分出列标题和氨基酸列表,再分别统计每列的氨基酸占比:

import csv
from collections import Counter

with open('test.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        # 拆分列标题和氨基酸字符串,只拆分第一个冒号
        header_part, aa_str = row[0].split(': ', 1)
        # 按|分割得到氨基酸列表
        aa_list = aa_str.split('|')
        total = len(aa_list)
        # 统计每个氨基酸的数量
        aa_counts = Counter(aa_list)
        
        # 输出列标题
        print(f"{header_part}:")
        # 遍历统计结果,计算并输出百分比
        for aa, count in aa_counts.items():
            percentage = (count / total) * 100
            print(f"{aa}: {percentage:.2f}%")
        # 空行分隔不同列的结果
        print()

关键修改说明

  1. 遍历所有行:原代码只提取了所有行的第一个元素组成列表,现在改为逐行处理每一行数据(每行对应一列的氨基酸数据)。
  2. 拆分标题与氨基酸:使用split(': ', 1)拆分每行内容,确保标题部分即使包含冒号也不会被错误分割。
  3. 简化统计逻辑:用collections.Counter快速统计氨基酸出现次数,替代手动字典计数,代码更简洁高效。
  4. 按列计算百分比:针对每列的氨基酸总数计算百分比,修正了原代码用总行数计算的错误。

如果不想使用Counter,可以用手动字典计数替代:

# 替换Counter部分的代码
aa_counts = {}
for aa in aa_list:
    if aa in aa_counts:
        aa_counts[aa] += 1
    else:
        aa_counts[aa] = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:10:28