Python openpyxl:从Excel中丢失精度读取浮动?
我正在使用OSX,我的Excel工作簿中有一些数据,这些数据的格式是数字(以下是示例) 现在,我正试图用Python和openpyxl导入它们:Python openpyxl:从Excel中丢失精度读取浮动?,python,excel,openpyxl,Python,Excel,Openpyxl,我正在使用OSX,我的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
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:]
输出:
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
[25]中的:价格[0]。价值
Out[25]:205.85
[26]中:类型(价格[0]。值)
Out[26]:浮动
在[27]中:价格[17]。价值
Out[27]:206.18
[28]中:价格[17],价值<206.18
Out[28]:假
而不是206.1799,这也是Excel(单元格B19)中的显示方式
有解决办法吗?
感谢您的关注。有没有不使用熊猫的原因
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
加布里埃尔
语法表_by_name对我不起作用,所以我认为它在2.3.1中一定过时了。您的代码在我使用时有效:
IBM_wb1 = wb1.get_sheet_by_name('IBM')
您可以使用更新openpyxl版本
pip install openpyxl --upgrade
在完成代码的其余部分后,我没有遇到任何问题,并且能够输出206.1799。Pandas在内部使用xlrd。为什么不删掉中间人?谢谢@DeepSpace,但我仍然没有得到206.1799,这是一个预览链接,我想知道这是否是Jupyter或IPython的副作用,因为在我的系统上openpyxl报告值为
ws=wb.active;ws['B19'].值;206.1799
格式设置仅与日期时间的openpyxl相关,因为这是识别它们的唯一方法。请注意,现在我想起来这是有道理的。我将从我的评论中编辑这一部分。