当前位置: 首页 > 面试题库 >

附带条件将HDF5文件读取到Pandas DataFrame

琴正初
2023-03-14
问题内容

我有一个巨大的HDF5文件,我想将其中的一部分加载到pandas DataFrame中以执行一些操作,但是我对过滤某些行感兴趣。

我可以用一个例子更好地解释:

原始的HDF5文件如下所示:

A    B    C    D
1    0    34   11
2    0    32   15
3    1    35   22
4    1    34   15
5    1    31   9
1    0    34   15
2    1    29   11
3    0    34   15
4    1    12   14
5    0    34   15
1    0    32   13
2    1    34   15
etc  etc  etc  etc

我想做的就是将其完全加载到pandas Dataframe中,但仅 where A==1 or 3 or 4

到目前为止,我可以使用以下命令加载整个HDF5:

store = pd.HDFStore('Resutls2015_10_21.h5')
df = pd.DataFrame(store['results_table'])

where在这里看不到如何包含条件。


问题答案:

hdf5文件必须以table格式(而不是fixed格式)编写,以便可以使用pd.read_hdfwhere参数进行查询。

此外,A必须声明为data_column:

df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'],
          format='table')

或者,将所有列指定为(可查询的)数据列:

df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=True,
          format='table')

那你可以用

pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]')

选择值列为A1、3或4的行。例如,

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2],
    'B': [0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1],
    'C': [34, 32, 35, 34, 31, 34, 29, 34, 12, 34, 32, 34],
    'D': [11, 15, 22, 15, 9, 15, 11, 15, 14, 15, 13, 15]})

df.to_hdf('/tmp/out.h5', 'results_table', mode='w', data_columns=['A'],
          format='table')

print(pd.read_hdf('/tmp/out.h5', 'results_table', where='A in [1,3,4]'))

产量

    A  B   C   D
0   1  0  34  11
2   3  1  35  22
3   4  1  34  15
5   1  0  34  15
7   3  0  34  15
8   4  1  12  14
10  1  0  32  13

如果值列表很长vals,则可以使用字符串格式来组成正确的where参数:

where='A in {}'.format(vals)


 类似资料:
  • 我想读取多个.csv文件,并将其文件名的日期时间部分附加到列标题中。每个 csv 文件都包含在特定日期时间获取的数据。每个文件名都具有以下格式: yyyy-mm-DD _ hh-mm-ss _ someothertext 每个文件只包含一列数据。 我成功地将多个文件导入为数据帧列表,如下所示: 然后,我将这些文件连接成一个数据帧,这样每一列都包含来自其中一个文件的数据: 然而,这是我丢失文件名信息

  • 我有一个程序,它总是将相同的文件附加到GMAIL(撰写 它所做的是: 在Android 6.0之前,它一直工作良好。现在,我在尝试使用它时收到以下错误: 无法附加空文件 Astro文件共享给我同样的错误(可能是旧版本)。 但是,我安装了ES File Explorer,当我执行相同的例程并选择该文件时,我会收到一个对话框,其中显示: 将文件作为 普通Android方式(适用于彩信、Gmail等)

  • 我目前正试图建立一个小型应用程序上的firebase作为它的评估。它看起来很有趣,而且超级高效,但我对firestore规则有一个问题。 我有一个集合(游戏),其对象如下所示: 它没有像预期的那样起作用。我希望它允许我列出的文档,但是如果有一个文档我无法,我希望获得“缺少或不足的权限”。我所能做的是列出所有文档,但不直接读取其中一些文档(规则在试图获取单个文档时有效,但在从集合中列出文档时无效)。

  • 问题内容: 我有一个电子邮件多部分邮件对象,我想将该电子邮件中的附件转换为python文件对象。这可能吗?如果有可能,我应该考虑使用Python中的哪种方法或类来执行此类任务? 问题答案: 我不太了解“电子邮件多部分邮件对象”的意思。您的意思是属于该类的对象吗? 如果这就是您的意思,那很简单。在多部分消息上,该方法返回消息部分的列表(每个消息部分本身都是对象)。您可以遍历这些部分并检查它们的属性:

  • 我有一个java代码,我在其中读取了一个txt文件,然后迭代它,以便我可以将其填充到2d数组中。在我读取文件后,我能够打印出其内容,因此我确信该文件已被读取。并且我还确信bufferedreader库的. hasNextLine方法在找到一行时显示为true。但是当我在time循环中使用它时,它就像没有找到任何行一样,因此它没有迭代,因为我不知道我在表中有多少行。== 此外,当我硬编码行数以便检查

  • 问题内容: 我试图将滚动条附加到“文本”字段,但无法这样做。这是代码段: 这段代码在我的文本字段旁边放置了一个非常小的滚动条(并且非常小,我的意思是您可以看到向上和向下箭头,但中间没有看到)。当文本字段填满时,我可以使用它滚动,但是至少有一种方法可以设置滚动条的高度,以使其看起来与文本字段的高度相同吗? 问题答案: Tkinter具有三个 几何管理器 :包装,网格和位置。 通常建议将包装和网格放在

  • 工作表列表 全量读取 游标读取 跳过指定行 忽略空白单元格 忽略空白行 忽略跳过动作常量 设置全局读取类型 单元格回调模式读取 数据类型读取 数据类型常量

  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 编译 编译时需添加 --enable-reader ./configure --enable-reader 示例 $config = ['path' => './tests']; $excel = new \Vtiful\K