2015-11-24 108 views
2

我工作的OS X和有我的Excel工作簿中的一些數據,這些數據被格式化爲編號(這裏是Dropbox link to data in Excelopenpyxl:從Excel中讀取浮點精度的損失?

data in Excel

現在,我試圖與它們導入的Python openpyxl

from openpyxl import load_workbook 

# opening the file .xlsx 
file_dir = './data' 
file_xlsx = file_dir + '/db_StocksHighFreq.xlsx' 

# with openpyxl 
wb1 = load_workbook(file_xlsx) 
IBM_wb1 = wb1.sheet_by_name('IBM') 

# "Time" time series 
Time = wb1['IBM'].columns[0][1:] 

# "Price" time series 
Price = wb1['IBM'].columns[1][1:] 

OUTPUT:

1) 「時間」 被正確地讀爲datetime.time對象

In [23]: Time[0].value 
Out[23]: datetime.time(9, 30) 

In [24]: type(Time[0].value) 
Out[24]: datetime.time 

2),但「價格」的時間序列,改爲浮動,似乎被截斷......

In [25]: Price[0].value 
Out[25]: 205.85 

In [26]: type(Price[0].value) 
Out[26]: float 

In [27]: Price[17].value 
Out[27]: 206.18 

In [28]: Price[17].value < 206.18 
Out[28]: False 

代替206.1799,這是怎麼也顯示在Excel(單元格B19 )。

任何解決方案? 感謝您的關注。

+0

我不知道這是Jupyter還是IPython的副作用,因爲在我的系統上,openpyxl報告的值是'''ws = wb.active; ws ['B19']。value; 206.1799''' –

回答

1

任何不使用的原因pandas

import pandas as pd 

df = pd.read_excel('db_StocksHighFreq.xlsx') 
print df.head() 
>>  Time Price 20 Sep 2012 Price 21 Sep 2012 
0 09:30:00   205.8500   207.3600 
1 09:31:00   205.3900   207.0600 
2 09:32:00   206.3600   207.0000 
3 09:33:00   206.0100   207.2000 
4 09:34:00   206.5000   207.4700 
5 09:35:00   206.5650   207.2400 
6 09:36:00   206.6100   207.3400 
7 09:37:00   206.8500   207.3900 
8 09:38:00   206.9200   207.4300 
9 09:39:00   206.9100   207.4000 
10 09:40:00   206.9500   207.4200 
11 09:41:00   206.6500   207.2800 
12 09:42:00   206.4400   207.1000 
13 09:43:00   206.3300   207.0600 
14 09:44:00   206.3100   206.9600 
15 09:45:00   206.2300   206.9200 
16 09:46:00   206.3000   207.1300 
17 09:47:00   206.1799   206.9700 
18 09:48:00   206.0240   206.9000 
19 09:49:00   206.0900   206.9900 
. 
. 
. 


print df['Price 20 Sep 2012'].dtype 
>> float64 
+2

熊貓在內部使用xlrd。爲什麼不剪掉中間人? –

+0

謝謝@DeepSpace,但我還沒有得到206.1799,這裏是預覽的鏈接 [預覽我用大熊貓得到的東西](https://www.dropbox.com/s/psxpv19x8lafo7x/Schermata%202015 -11-24%20alle%2016.34.47.png?dl = 0) –

0

加布裏埃萊,

語法sheet_by_name並沒有爲我工作,所以我相信它一定是過時的2.3.1。當我用你的代碼工作:

IBM_wb1 = wb1.get_sheet_by_name('IBM') 

可以使用

pip install openpyxl --upgrade 

通過你的代碼的其餘部分按照更新openpyxl版本,我沒有經歷的問題,並能輸出206.1799。

+1

格式化僅與日期時間的openpyxl相關,因爲這是識別它們的唯一方法。 –

+0

注意到了,現在我想到了這一點。我會在評論中修改那部分內容。 – crussell