【问题标题】:Extracting values of a key from an array of dictionaries从字典数组中提取键的值
【发布时间】:2020-04-16 04:26:45
【问题描述】:

我想从 .npy 文件中读取以执行一些信号处理任务,但在此任务期间我收到此错误:

IndexError:只有整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组是有效的索引

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt


file  = '/signal/data.npy'
d = np.load(file,allow_pickle=True,encoding = 'latin1')

d['soma'][0]

有同样的问题,但我不能用它们来解决这个问题。所以任何人都可以帮我解决它吗? 谢谢

这是错误:

这是我数据的一部分(d 等于 res):

【问题讨论】:

  • 请附上您的data.npy,以便重现。谢谢。
  • 我会放一个数据样本,我无法上传。
  • 所以你的数组包含一堆字典。您是要提取所有包含键 ["results"]["lfp"] 的元素,还是包含该键的特定元素?
  • 是的,我想用这些键全选。
  • res 是一个包含字典的对象 dtype 数组。 res[0] 就是其中之一。 res[0]['soma'] 应该可以工作。索引顺序很重要。

标签: python-3.x python-2.7 numpy


【解决方案1】:

您的数据由字典数组组成。对于每个数组,您都有一些带有其值的键。 @hpaulj 说的解决方案是:

   res[array_index]["your_key"]

【讨论】:

    【解决方案2】:

    您有一个 numpy 数组 d 并且您正在尝试访问例如"soma" 索引这是不可能的。 Numpy 索引规则是:
    只有整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组是有效的索引.

    如果您的 numpy 数组包含字典,则需要提取字典。 d['soma'] 不提取 numpy 数组的元素。
    这循环遍历数组d,并为d 中所有具有键'soma' 的字典提取键'soma' 的值的第一个元素:

    lfp = [i['soma'][0] for i in d if 'soma' in i]
    

    如果是数据框而不是 numpy 数组,请尝试:

    d = pd.read_pickle(file)
    

    【讨论】:

    • @Mhasa87 编辑了帖子。您的图片不包含具有键 results 的示例。所以我假设它的值也是一个必须包含键"lfp" 的字典。如果您还需要检查嵌套字典中的键是否存在,可以包含另一个 if 语句。
    • 非常感谢您的帮助。我觉得我有一些问题,我会改变这个帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2019-10-04
    • 2013-06-09
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    相关资源
    最近更新 更多