【问题标题】:how to import list of list of dictionaries as numpy array如何将字典列表列表导入为numpy数组
【发布时间】:2018-04-19 04:41:19
【问题描述】:

我有以下形式的字典列表:

[[{'x': 33, 'y': 69, 'z': 870}, {'x': 33, 'y': 69, 'z': 870}],[{'x': 33, 'y': 64, 'z': 876}]]

此数据以 .csv 文件的形式显示。我需要将它作为 NumPy 数组导入 Python。请帮忙!

【问题讨论】:

  • csv 字典文件是什么样的?通常csv 有简单的行,列由分隔符分隔,如,
  • 它有 2 列...第一列包含整数,第二列包含上述格式的数据。我需要对每个 (x,y,z) 执行操作。
  • in above format - 加上引号 {} 和 :?这将是令人讨厌的解析。请提供文件样本。
  • 文件中的每一行如下带有';'作为分隔符 --------- 31;[[{"x" : 1, "y" : 4, "z" : 6},{"x" : 1, "y" : 2, " z" : 8}],[{"x" : 5, "y" : 1, "z" : 6}],[{"x" : 15, "y" : 44, "z" : 6}, {“x”:12,“y”:22,“z”:56}]]

标签: python csv numpy dictionary genfromtxt


【解决方案1】:

让我们使用 pd.concat 和 pd.DataFrame:

import pandas as pd
l = [[{'x': 33, 'y': 69, 'z': 870}, {'x': 33, 'y': 69, 'z': 870}],[{'x': 33, 'y': 64, 'z': 876}]]
pd.concat([pd.DataFrame(i) for i in l]).values

输出:

array([[ 33,  69, 870],
       [ 33,  69, 870],
       [ 33,  64, 876]], dtype=int64)

【讨论】:

    【解决方案2】:

    鉴于您的示例文本:

    In [814]: txt
    Out[814]: '[[{"x" : 1, "y" : 4, "z" : 6},{"x" : 1, "y" : 2, "z" : 8}],[{"x" : 5, "y" : 1, "z" : 6}],[{"x" : 15, "y" : 44, "z" : 6},{"x" : 12, "y" : 22, "z" : 56}]]'
    
    
    In [818]: data = json.loads(txt)
    In [819]: data
    Out[819]: 
    [[{'x': 1, 'y': 4, 'z': 6}, {'x': 1, 'y': 2, 'z': 8}],
     [{'x': 5, 'y': 1, 'z': 6}],
     [{'x': 15, 'y': 44, 'z': 6}, {'x': 12, 'y': 22, 'z': 56}]]
    

    这是一个包含 3 个列表的列表。子列表有 2 个或 1 个字典。我可以看到迭代字典以将值合并到一个字典中。例如,一个具有 3 个键的键,以及一个类似嵌套的值列表列表。不能是常规的numpy 数组。

    仅通过阅读Out[819],我希望我们可以生成:

    In [825]: dd = {'x': [[1,1],[5],[15,12]], 'y':[[4,2],[1],[44,22]], 'z':[[6,8],[6
         ...: ],[6,56]]}
    In [826]: dd
    Out[826]: 
    {'x': [[1, 1], [5], [15, 12]],
     'y': [[4, 2], [1], [44, 22]],
     'z': [[6, 8], [6], [6, 56]]}
    

    我不会详细介绍通过列表和字典进行迭代来获得它的细节。没有什么棘手或先进的,只是有点乏味。

    更多关于合并字典值

    Python: Concatenate many dicts of numpy arrays with same keys and size

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 2018-02-26
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2021-06-09
      • 2019-03-24
      相关资源
      最近更新 更多