【问题标题】:Add a column to a HDF5 FILE向 HDF5 文件添加列
【发布时间】:2015-10-06 01:53:23
【问题描述】:

我目前正在尝试向已存在的 HDF5 文件添加一列。 基本上我有一个日期为“%Y-%m-%d %hh:%mm:%ss”的列,我想添加一个新列,其日期格式为“%Y-%m-%d” ”。 我的问题是我不知道该怎么做,我尝试使用 .append 但没有成功。我想稍后将这些日期与其他日期进行比较,以便只保留我想要的日期。 如果有人可以帮助我,那就太棒了(我正在用 Python 编码)!

谢谢

皮埃尔

【问题讨论】:

  • 确实要添加列吗?它是多余的,并且比源列具有更少的信息。至于如何向 hdf5 数据集添加列,据我了解,这不是一个简单的操作,这就是为什么我问您是否真的要添加列。如果您确实想向现有数据集添加列,那么如果您同时提供示例数据和示例代码,那么回答您的问题会容易得多。
  • 感谢您的回答菲尔!我认为这更容易和基本操作,但显然不是。其实我有两个文件。首先我有一个“容器”,它包含这个 HDF5 数据集,它有 7 列,包括带有日期的列。我的另一个文件管理器是一个 .csv 文件,其中包含我需要的日期列表。我要做的是创建一个新的 HDF5 数据集,其中仅包含有关 csv 文件中给出的日期的数据。 (它基本上是一个过滤器)我在这个领域很安静,这就是为什么我有点迷路。如果您有任何想法或链接可以帮助我,那就太好了。谢谢

标签: python hdf5 h5py


【解决方案1】:

我实际上通过将 ma 数据帧逐行复制到一个新文件并同时使用我的过滤器来解决了这个问题。似乎工作,即使它需要一些时间。 谢谢

再次感谢 Phil,这是我用来编写 H5 文件的代码。实际上过滤和写入一个新文件大约需要 2 分钟。 .CSV 文件是我想要保留的日期列表(因此删除与其他日期有关的行)。

_hdf_store_path = config.get_hdf_store_path()
store = pd.HDFStore(os.path.join(_hdf_store_path, "household_{}_good.h5".format(household_id)), mode='w')
data_file = os.path.join(_hdf_store_path, "household_{}.h5".format(household_id))
data_store = pd.HDFStore(data_file)
df_1 = pd.concat([data_store[key] for key in data_store.keys()])
df_1_bis = df_1[df_1.date >= "2012-09-01"].sort("date")

dates = []
with open('Good_dates_{}_80pc.csv'.format(household_id), 'rb') as fp:
    for line in fp:
        str_line = line.decode("utf-8")
        dates.append(datetime.datetime.strptime(str_line.split()[0], "%Y-%m-%d"))

for day in dates:
    print("day =", day)
    day_after = day + datetime.timedelta(1)
    df_bis = df_1_bis[df_1_bis.date >= day]
    df = df_bis[df_bis.date <= day_after]
    store.append("day", df, min_itemsize={'ID': 15, 'sensor_id': 15, 'type': 15, 'date': 15, 'room': 15,
                                          'place': 15, 'value': 15})
store.close()

【讨论】:

  • 我确信使用 h5py 和 pandas 有一种更清洁、更快捷的方法。如果您提供示例代码和数据文件,我会查看。
猜你喜欢
  • 1970-01-01
  • 2021-10-16
  • 2017-06-22
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多