【问题标题】:Pandas HDFStore weird behaviourPandas HDFStore 奇怪的行为
【发布时间】:2016-10-05 08:01:19
【问题描述】:

我对此感到非常困惑,我有两个脚本从同一个笔记本服务器运行。我在同一个文件夹中有一个 HDFStore,但是对于一个脚本,它看起来是空的,而对于另一个则不是。以下是在两个笔记本中运行的相同代码:

import os 
os.getcwd()

返回 NB 1:'E:\DoingDataScience\Identify\Scripts'

返回 NB 2:'E:\DoingDataScience\Identify\Scripts'

store = pd.HDFStore('data_test.h5')
store.items

返回NB 1:

<bound method HDFStore.items of <class 'pandas.io.pytables.HDFStore'>
File path: data_test.h5
/test_database            frame        (shape->[3,5])>

返回 NB 2:

<bound method HDFStore.items of <class 'pandas.io.pytables.HDFStore'>
File path: data_test.h5
Empty>

所有情况看起来都一样。它是否跟踪 Pandas DF 的来源?我认为这可能是由于 NB 1 已经打开了该文件,因为 NB 1 创建了它。但是杀死 NB 1 并重新启动 NB 2 也没有任何作用。

编辑:添加 os.stats:

NB 1 和 NB 2 都有:

nt.stat_result(st_mode=33206, st_ino=0L, st_dev=0L, st_nlink=0, 
st_uid=0, st_gid=0, st_size=1311400L, st_atime=1465072325L, 
st_mtime=1465149771L, st_ctime=1465072325L)

更新:现在重新启动后我收到一个新错误:

HDF5ExtError:HDF5 错误回溯

文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5F.c”,第 604 行,在 H5Fopen 无法打开文件 文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5Fint.c”,第 1085 行,在 H5F_open 无法读取超级块 文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5Fsuper.c”,第 294 行,在 H5F_super_read 无法加载超级块 文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5AC.c”,第 1320 行,在 H5AC_protect 中 H5C_protect() 失败。 文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5C.c”,第 3574 行,在 H5C_protect 中 无法加载条目 文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5C.c”,第 7954 行,在 H5C_load_entry 无法加载条目 文件“C:\aroot\work\hdf5-1.8.15-patch1\src\H5Fsuper_cache.c”,第 476 行,在 H5F_sblock_load 截断文件:eof = 800,sblock->base_addr = 0,stored_eoa = 1181448

HDF5 错误回溯结束

无法打开/创建文件“data_test.h5”

【问题讨论】:

  • 能否打印出每种情况下HDStore的文件位置?你确定它真的是同一个文件吗?
  • 我怎样才能得到它? store.filename 只返回名称,而不是路径
  • 你能从两个笔记本上发布os.stat('data_test.h5') 的输出吗?在一个NB中打开文件不应该被锁定
  • 很可能您已经在 NB1 会话中向 HDF 存储中写入了一些内容并且没有关闭它,因此它还没有被刷新到磁盘
  • 在关闭用于写入/更改h5 文件的存储之前,您无法从h5 文件(从磁盘)读取新数据

标签: python pandas hdfstore


【解决方案1】:

很可能您已经编写了数据

/test_database            frame        (shape->[3,5])>

在 NB1 的会话中并且没有关闭 store(这会将您的更改保存并刷新到文件/磁盘)

因此,当您在 NB2 中打开 h5 文件时,它尚未刷新,因此为空。

【讨论】:

  • 如何将更改保存并刷新到磁盘?使用df.to_hdf(path, ...) 时出现类似错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2018-11-25
  • 2021-03-12
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多