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

Pandas DataFrame列顺序意外错乱问题排查咨询

问题原因及解决办法

原因分析

你遇到的列顺序混乱问题,核心出在用普通字典创建DataFrame时的列顺序不确定性:

  • 在Python 3.7之前,普通字典是无序的,你编写字典时的键顺序不会被保留,创建出的new_df_row列顺序会默认按键的ASCII码排序(比如#Contigs这类以#开头的键,ASCII码比字母开头的Assembly小,会排在前面)。
  • 初始的空stats_df虽然指定了列顺序,但第一次concat时,因为它是空的,Pandas会以第一个有数据的new_df_row的列顺序作为合并结果的列顺序,后续合并其他行时列顺序不会改变,最终就出现了和初始定义不符的列顺序。

解决办法

有几种简单的方式可以固定列顺序:

  1. 创建new_df_row时强制指定列顺序
    在pd.DataFrame()中添加columns参数,明确列的排列顺序,和初始的stats_df保持一致:
    new_df_row = pd.DataFrame(
        {'Assembly':[assembly_name],'Size':[assembly_size_in_Mbp],'#Contigs':[num_of_contigs],'#Contigs > 3000':[greater_than_3000_count],'N50':[n50],'Longest_contig':[longest_contig]},
        columns=['Assembly','Size','#Contigs','#Contigs > 3000','N50','Longest_contig']
    )
    
  2. 最后统一调整列顺序
    所有数据合并完成后,直接按目标顺序重新索引列:
    stats_df = stats_df[['Assembly','Size','#Contigs','#Contigs > 3000','N50','Longest_contig']]
    
  3. 使用有序字典(适用于Python 3.7之前版本)
    导入collections.OrderedDict来创建有序字典,确保键的顺序被保留:
    from collections import OrderedDict
    
    new_df_row = pd.DataFrame(OrderedDict([
        ('Assembly', [assembly_name]),
        ('Size', [assembly_size_in_Mbp]),
        ('#Contigs', [num_of_contigs]),
        ('#Contigs > 3000', [greater_than_3000_count]),
        ('N50', [n50]),
        ('Longest_contig', [longest_contig])
    ]))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:03:11