字典转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
相关产品推荐
相关产品推荐

