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

Python pandas读取tsv拼接列时locus_tag前导0丢失问题

问题原因

pandas的read_csv方法默认会自动推断每列的数据类型,locus_tag列的内容全为数字格式,读取时会被自动识别为整数类型,而整数类型本身不存储前导零,读取完成后再调用astype(str)转换,只能得到丢失前导零的整数值对应的字符串,自然无法保留原始格式。
另外你贴的代码中PULs["genome_locus_tag]缺少后半段双引号,运行时会报语法错误,编写时需要补上。

正确实现方式

有两种常用实现方案,优先选第一种:

  • 方案1:读取文件时指定列类型(最稳妥)
    从读取阶段就避免类型自动推断的问题,不需要额外做补零处理,不管locus_tag长度是否一致都能正确保留原始值:
    import pandas as pd
    
    # 通过dtype参数指定locus_tag列为字符串类型
    PULs = pd.read_csv('PULs.tsv', sep='\t', dtype={'locus_tag': str})
    PULs["genome_locus_tag"] = PULs["genome"] + "_" + PULs["locus_tag"]
    print(PULs["genome_locus_tag"])
    
    运行后拼接结果会完整保留前导零,输出格式为PalbDSM11370_02121、PalbDSM11370_02122,完全匹配原始文件内容。
  • 方案2:已读取完成的情况下补前导零
    如果已经加载完数据不想重新读取,且确认所有locus_tag原始长度固定(比如示例中均为5位),可以用zfill方法补回前导零:
    # 按5位固定长度在字符串前补零
    PULs["genome_locus_tag"] = PULs["genome"] + "_" + PULs["locus_tag"].astype(str).str.zfill(5)
    

内容的提问来源于stack exchange,提问作者aetobatus-narinari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:24:15