我正在使用OS X,我的Excel工作簿中有一些数据,格式为数字(这里是指向Excel中数据的Dropbox链接)
现在,我正尝试使用openpyxl在Python中导入它们:
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) “时间”正确解读为日期时间。时间对象
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)中的显示方式。
有解决办法吗?谢谢你的关注。
加布里埃尔,
语法表_by_name对我不起作用,所以我认为它在2.3中一定过时了。1.您的代码在我使用时有效:
IBM_wb1 = wb1.get_sheet_by_name('IBM')
您可以使用更新openpyxl版本
pip install openpyxl --upgrade
在完成其余代码后,我没有遇到任何问题,能够输出206.1799。
不使用熊猫的任何原因?
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
本文向大家介绍C++中double浮点数精度丢失的深入分析,包括了C++中double浮点数精度丢失的深入分析的使用技巧和注意事项,需要的朋友参考一下 看了一篇关于C/C++浮点数的博文,在Win32下,把int, 指针地址,long等4字节整数赋给一个double后,再用该double数赋给原始类型的数,得到的结果于最初的数值一致,即不存在任何精度丢失。例如下面的结果将总是true: 但是对于l
在单精度浮点数下,当我们输入的数字过大时会导致精度丢失。 比如 输入 16777217 实际存储是 16777216;输入 16777219 实际存储 16777220。 我好奇于为什么当输入 16777217 时就是减掉1,而输入 16777219 时就是加一。 这个是对应的单精度浮点数的存储格式 这个是我所列的转换误差的表格 能够看出 输入 16777217 的时候实际存储时 尾数位的第24位
问题内容: 我在ResultSet.getDate(x)调用中失去了精度。基本上: 返回的日期被截断为MODIFIED是默认精度的Oracle TIMESTAMP字段的日期。我认为可能缺少一些JDBC调整;通常,TIMESTAMP与DATE兼容,但我希望不必重新定义整个表。 问题答案: 传回,而不是。它被定义为一个永恒的日期。如果需要时间戳记,请使用!
问题内容: 我正在尝试从文件中读取一些数字(双精度),并将它们存储在ArrayList和一个数组中(是,我需要两个),其代码如下: } 我尝试读取的文件是: 但是我的代码无法正常工作,hasNextDouble()函数什么也找不到,我在做什么错呢? 编辑:好的,所以我编辑了一下源代码(从Object [] []更改为Double [] []),并将插入值插入到ArrayList中之后,将插入值添加
问题内容: 如何使用正则表达式从字符串中提取双精度值。 问题答案: 这是简单的方法。请勿将regex用于内置类型。
如何在Java中从键盘读取双变量?我试图解决这个问题,但没有成功。上面说: 线程“main”java中出现异常。util。java上的输入不匹配异常。util。扫描仪。throwFor(Scanner.java:864)访问java。util。扫描仪。下一个(Scanner.java:1485)是java。util。扫描仪。nextDouble(Scanner.java:2413)位于Main。m