2017-04-05 63 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 

位於腳本的最頂端。