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

Pandas:根据指定Strain筛选对应Contig与Homology的问题

问题修正:按指定Strain输出Contig对应的Homology值

问题根源

当前代码存在三个核心问题:

  1. CSV分隔符错误:原文件用空格分隔列,但代码指定sep=";",导致所有内容被读入同一列,后续过滤逻辑完全失效;
  2. 过滤逻辑不严谨:提取homology时仅匹配contig值,未同时限定strain,因此会返回所有菌株中该contig的结果,而非目标菌株的对应值;
  3. 参数格式错误:调用函数时1A42未加引号,会被当作变量而非字符串处理,直接引发报错。

修正后的代码

import pandas as pd

def myfunction(strain, csv_path):
    # 用正则匹配任意数量空格作为分隔符,正确解析CSV列
    h_df = pd.read_csv(csv_path, sep="\s+", dtype='unicode', on_bad_lines='skip')
    # 直接筛选目标菌株的所有行,确保contig与homology的对应关系精准
    strain_data = h_df[h_df['strain'] == strain]
    # 遍历输出每一组contig和homology
    for _, row in strain_data.iterrows():
        print(row['contig'], row['homology'])

# 注意:strain需传入字符串格式,csv_path替换为你的实际文件路径
myfunction('1A42', 'your_csv_file.csv')

简化输出版(表格形式)

如果需要更清晰的表格输出,可以用以下写法:

import pandas as pd

def myfunction(strain, csv_path):
    h_df = pd.read_csv(csv_path, sep="\s+", dtype='unicode', on_bad_lines='skip')
    # 只保留需要的两列并输出
    result = strain_data = h_df[h_df['strain'] == strain][['contig', 'homology']]
    print(result.to_string(index=False))

myfunction('1A42', 'your_csv_file.csv')

关键优化点

  • 分隔符修正:sep="\s+"适配原CSV的空格分隔格式,正确拆分三列数据;
  • 精准筛选:通过h_df['strain'] == strain直接锁定目标菌株的行,避免跨菌株匹配;
  • 逻辑简化:无需先提取contig再循环查询,直接遍历筛选后的结果,代码更高效简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:10:47