字典转换为pandas df,int在一列中变为float

pn9klfpd  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(124)

我想在www.example.com _csv()的帮助下从我的数据中生成一个.txt输出pd.to。我已经创建了一个包含我数据列的字典,然后我将它转换为pandas df。但是在这一步,以及后续的.to_csv(),我注意到我的中间列的数据从int转换为float。下面是我得到的df:

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)


在字典中,这里是所有的数据,我想在df中看到:

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, '', '', '']


正如你所看到的,在最后一列中,所有的数据都像我想要的那样出现。有些值是float,有些是int。在中间列中,数字和它们的数据类型是相同的。
你能帮助我,如何实现相同的外观?
谢谢你,谢谢

更新##

所以我发现在我的“原始数据”列表中有int和float,但在“干净数据”中也有int,float和str。因此,当我创建pandas df时,发生了以下情况:

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


我想,为什么不把第二列的dtype也修改为object呢?如果我将第二列转换为object,它仍然保留小数,所以我在df的末尾添加了一个空行,这样我的所有列都包含:int,float和str。因此,我的所有列都被定义为对象。
保存了这个df后,我得到了我想要的外观!
这里需要注意的是,当我想再次读取这个文件时,我必须定义dtype!像这样:

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

o2g1uqev

o2g1uqev1#

您可以将值转换为字符串并定义格式,即:

pd.Series([80448566, 8044856600, 2097854, 557513, 50.42, 50.88, 96.62, 94.29, 87.69, 84.29, 169653, 197188, 27535]).map('{:.2f}'.format)

字符串
对于您的代码示例

df_data["Clean data"] = df_data["Clean data"].map('{:.2f}'.format)


应该可以
标签:https://stackoverflow.com/a/20937592/15658660

相关问题