Pandas转置DataFrame后出现额外数字行的问题咨询
解决转置Pandas DataFrame后CSV顶部出现数字行的问题
我太懂这种被莫名多出的数字行搞懵的感觉了!咱们一步步来搞清楚问题出在哪,以及怎么解决。
问题根源
你看到的顶部数字行,其实是原始DataFrame默认的数字行索引。当你直接读取CSV而没有指定索引列时,Pandas会自动给每行分配0、1、2...的索引。转置(.T)之后,这些数字索引就变成了转置后DataFrame的列名,当你直接to_csv时,这些列名就会被写入文件顶部,也就是你看到的那行数字。
你的尝试没生效的原因:
- 设置
index=False是去掉最终保存时的行索引,但没解决转置后列名是数字的问题; - 执行
df_merged.set_index('Sample',inplace=True)如果是在转置后操作,这时候已经晚了——转置后的列已经是原来的数字索引了,无法再把'Sample'设为索引来覆盖。
修正后的解决方案
有两种简单的方式可以解决,核心都是读取数据时就把第一列(Sample列)设为索引,避免默认的数字索引干扰:
方法1:重置索引并指定表头
# 读取数据时,将第一列(即包含tRNA/CDS等的列)设为索引 df_merged = pd.read_csv(str(save_path) + "all_stats_matrix.csv", index_col=0) # 转置数据 df_transposed = df_merged.T # 把转置后的行索引(input_test等)转为一列,并命名为'Sample' df_transposed = df_transposed.reset_index().rename(columns={'index': 'Sample'}) # 保存时不生成额外的数字索引列 df_transposed.to_csv(str(save_path) + "all_stats_matrix_transposed.csv", index=False)
方法2:直接指定索引标签保存
这种更简洁,转置后直接保存时,把行索引的名称设为'Sample':
# 同样先把第一列设为索引读取 df_merged = pd.read_csv(str(save_path) + "all_stats_matrix.csv", index_col=0) # 转置后保存,index_label参数会把行索引作为第一列,表头设为'Sample' df_merged.T.to_csv(str(save_path) + "all_stats_matrix_transposed.csv", index_label='Sample')
验证效果
用上面任意一种方法,你得到的CSV都会是这样的结构,完全没有顶部的数字行:
Sample,tRNA,CDS,3utr,5utr,5ss,3ss,proxintron,distintron,noncoding_exon,noncoding_5ss,noncoding_3ss,noncoding_proxintron,noncoding_distintron,allexonic,allintronic,all input_test,5,9330,2525,1966,960,932,1221,6450,1477,25,16,68,629,15298,10301,27131 input_test2,5,9330,2525,1966,960,932,1221,6450,1477,25,16,68,629,15298,10301,27131 ...
内容的提问来源于stack exchange,提问作者vegal35866
相关产品推荐
相关产品推荐

