选择相同的条件,但HDFStore给出不同的答案

时间:2016-03-22 07:41:51

标签: python pandas

我将数据存储在hdf5文件中。奇怪的是我选择了一个条件相同的表,但HDFStore给出了不同的答案。

谁能告诉我为什么?

In [2]: import pandas as pd
In [3]: store=pd.HDFStore("./data/m2016.h5","r")
In [4]: store
Out[4]: 
<class 'pandas.io.pytables.HDFStore'>
File path: ./data/m2016.h5
/m2016            frame_table  (typ->appendable,nrows->37202055,ncols->6,indexers->[index],dc->[dt,code])
In [5]: a=store.select('m2016',where="code='000001'")
In [6]: b=store.select('m2016',where="code='000001'")
In [7]: a.shape
Out[7]: (2388318, 6)
In [8]: b.shape
Out[8]: (2374525, 6)
In [9]: a.head()
Out[9]: 
                   dt  market    code  price   volume  preclose
85920 2016-01-04 09:30:00       0  000001  11.98  1102900     11.99
85921 2016-01-04 09:31:00       0  000001  11.96   289100     11.99
85922 2016-01-04 09:32:00       0  000001  11.97   361800     11.99
85923 2016-01-04 09:33:00       0  000001  12.00   279200     11.99
85924 2016-01-04 09:34:00       0  000001  12.00   405600     11.99

我在我的三台计算机上测试了它,结果如下:

PC1,os:Win2012server,python:winpython 2.7.10.3(64bits),选择结果错误。

PC2,os:Win10,python winpython 2.7.10.3(64bits),选择结果错误。

PC3,os:Win7,python:Winpython 2.7.10.3(64bits),选择结果还可以!

也许HDFStore.select只能在Win7上运行?

2 个答案:

答案 0 :(得分:0)

您的操作系统的默认编码可能有所不同?

这可以工作b = store.select(&#39; m2016&#39;,其中=&#34;代码= u&#39; 000001&#39;&#34;)

答案 1 :(得分:0)

我已经在Win7的PC上对它进行了更多测试,结果仍然是随机错误。

In [1]: import pandas as pd
In [2]: cd /projects
C:\projects
In [3]: store=pd.HDFStore("./data/m2016.h5","r")
In [4]: d0=store.select("m2016",where='dt<Timestamp("2016-01-10")')
In [5]: d1=store.select("m2016",where='dt<Timestamp("2016-01-10")')
In [6]: d0.shape
Out[6]: (6917149, 6)
In [7]: d1.shape
Out[7]: (4199769, 6)
In [8]: d0.tail()
Out[8]: 
                        dt  market    code  price  volume  preclose
455381 2016-04-21 11:11:00       1  600461  13.33   16400      13.2
455386 2016-04-21 11:16:00       1  600461  13.36   13800      13.2
455387 2016-04-21 11:17:00       1  600461  13.37    8300      13.2
455388 2016-04-21 11:18:00       1  600461  13.36    9800      13.2
455389 2016-04-21 11:19:00       1  600461  13.34   15300      13.2
In [9]: d1.tail()
Out[9]: 
                        dt  market    code  price  volume  preclose
573543 2016-04-22 14:03:00       1  601333   3.94    8200      3.97
573548 2016-04-22 14:08:00       1  601333   3.96   45000      3.97
573549 2016-04-22 14:09:00       1  601333   3.96    8800      3.97
573550 2016-04-22 14:10:00       1  601333   3.97   10700      3.97
573551 2016-04-22 14:11:00       1  601333   3.96    6800      3.97
In [10]: !ptdump  m2016.h5
/ (RootGroup) ''
/m2016 (Group) ''
/m2016/table (Table(50957318,), shuffle, zlib(9)) ''

我上传了我的hdf5文件here