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

字典转Pandas DataFrame后某列int转float的问题及解决

Pandas导出txt时Raw data列整数自动转为float的解决办法

我想用pd.to_csv()将数据导出为.txt文件,先创建包含数据列的字典并转换为Pandas DataFrame,但转换及后续导出过程中,发现Raw data列中的int类型被自动转为float,还以科学计数法展示,导出后的DataFrame显示如下:

Type      Raw data  Clean data
0                     Number of Reads:  8.044857e+07    80054190
1                           Data Size:  8.044857e+09  8005419000
2                            N of fq1:  2.097854e+06        4977
3                            N of fq2:  5.575130e+05      211801
4                        GC(%) of fq1:  5.042000e+01       50.44
5                        GC(%) of fq2:  5.088000e+01       50.88
6                       Q20(%) of fq1:  9.662000e+01       96.67
7                       Q20(%) of fq2:  9.429000e+01        94.3
8                       Q30(%) of fq1:  8.769000e+01       87.74
9                       Q30(%) of fq2:  8.429000e+01        84.3
10         Discard Reads related to N:  1.696530e+05            
11  Discard Reads related to low qual:  1.971880e+05            
12   Discard Reads related to Adapter:  2.753500e+04   

实现代码

data_raw_fq = [raw_reads, data_raw, n_raw_fq1, n_raw_fq2, gc_raw_fq1, gc_raw_fq2,
                    q20_raw_fq1, q20_raw_fq2, q30_raw_fq1, q30_raw_fq2, discard_n,
                    discard_low, discard_adapter]

data_clean_fq = [clean_reads, data_clean, n_clean_fq1, n_clean_fq2, gc_clear_fq1,
                      gc_clear_fq2, q20_clear_fq1, q20_clear_fq2, q30_clear_fq1, q30_clear_fq2,
                      "", "", ""]

row_names = ["Number of Reads:", "Data Size:", "N of fq1:", "N of fq2:", "GC(%) of fq1:", "GC(%) of fq2:",
                  "Q20(%) of fq1:", "Q20(%) of fq2:", "Q30(%) of fq1:", "Q30(%) of fq2:",
                  "Discard Reads related to N:", "Discard Reads related to low qual:",
                  "Discard Reads related to Adapter:"]

df_data = {
    'Type': row_names,
    'Raw data': data_raw_fq,
    'Clean data': data_clean_fq
}

QC_data = pd.DataFrame.from_dict(df_data)

原始数据

data_raw_fq
[80448566, 8044856600, 2097854, 557513, 50.42, 50.88, 96.62, 94.29, 87.69, 84.29, 169653, 197188, 27535]

data_clean_fq
[80054190, 8005419000, 4977, 211801, 50.44, 50.88, 96.67, 94.3, 87.74, 84.3, '', '', '']

Clean data列的显示符合预期(包含int、float和空字符串),但Raw data列的整数被转为float并以科学计数法展示,如何让该列也达到预期显示效果?


排查与解决办法

排查后发现:Raw data列表仅包含int和float类型,而Clean data列表包含int、float和str类型,导致DataFrame的数据类型如下:

print(QC_data.dtypes)
Type           object
Raw data      float64
Clean data     object
dtype: object

尝试将Raw data列的dtype改为object,但仍会保留小数。后来在DataFrame末尾添加空行,让所有列都包含int、float和str类型,此时所有列的dtype均为object,导出后达到了预期显示效果。

注意:再次读取该文件时需指定dtype=str,代码如下:

data = pd.read_csv("file.txt", sep="\t", dtype=str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:05:57