2017-04-05 41 views
2

我不明白为什么熊猫数据框四舍五入我的列中的值,我划分其他两列的值。我希望新小柱中的数字有两位小数,但是数值是四舍五入的。我检查了列的dtype,并且都是“float64”。为什么python熊猫数据框四舍五入我的价值观?

import pandas as pd 
import numpy as np 


# CURRENT DIRECTORY 
cd = os.path.dirname(os.getcwd()) 

# concatenate csv files 
dfList = [] 

for root, dirs, files in os.walk(cd): 
    for fname in files: 
     if re.match("output_contigs_SCMgenes.csv", fname): 
      frame = pd.read_csv(os.path.join(root, fname)) 
      dfList.append(frame)  

df = pd.concat(dfList) 

#replace nan in SCM column with 0 
df['SCM'].fillna(0, inplace=True) 

#add column with genes/SCM 
df['genes/SCM'] = df['genes']/df['SCM'] 

输出如下:

genome contig genes SCM genes/SCM 
0 20900  48  1 0  inf 
1 20900  37 130 103   1 
2 20900  35  1 1   1 
3 20900  1  79 66   1 
4 20900  66  5 3   2 

但我想,我的最后一列不包含圆值,但值至少有2位小数。

+0

我无法复制它。你的Python,Pandas和Numpy版本是什么? – MaxU

+0

不,这仍然给出相同的输出不幸 – Gravel

+0

我使用Anaconda3 – Gravel

回答

2

我可以通过设置pd.options.display.precision0重现此问题:

In [4]: df['genes/SCM'] = df['genes']/df['SCM'] 

In [5]: df 
Out[5]: 
    genome contig genes SCM genes/SCM 
0 20900  48  1 0  inf 
1 20900  37 130 103 1.262136 
2 20900  35  1 1 1.000000 
3 20900  1  79 66 1.196970 
4 20900  66  5 3 1.666667 

In [6]: pd.options.display.precision = 0 

In [7]: df 
Out[7]: 
    genome contig genes SCM genes/SCM 
0 20900  48  1 0  inf 
1 20900  37 130 103   1 
2 20900  35  1 1   1 
3 20900  1  79 66   1 
4 20900  66  5 3   2 

检查大熊猫& numpy的选项

0

尝试DF [ '基因/ SCM'] = DF [ '基因']/DF [ 'SCM']轮(2)

0

不能肯定,因为我不能重现,但你可以尝试:

from __future__ import division 

位于脚本的最顶端。