【问题标题】:How to iterate and extract data from this specific JSON file example如何从这个特定的 JSON 文件示例中迭代和提取数据
【发布时间】:2017-07-16 20:46:46
【问题描述】:

我正在尝试使用 Python 从 JSON 文件中提取数据。

主要是,我想从“技术”部分中提取日期和时间,将其放入数据框的一列,以及提取“AKG”编号并将其放入数据框的第二列.是的,我看过类似的问题,但这个问题是不同的。感谢您的帮助。

JSON 文件的 downNdirty 示例如下:

    { 'Meta Data': { '1: etc'
                     '2: etc'},
      'Technicals': { '2017-05-04 12:00': {  'AKG': '64.8645'},
                      '2017-05-04 12:30': {  'AKG': '65.7834'},
                      '2017-05-04 13:00': {  'AKG': '63.2348'}}}

如您所见,让我感到困惑的是,当日期保持不变时,时间却在前进。 'AKG' 永远不会改变,但数字会改变。我一直在使用的一些相关代码如下。我可以提取日期和时间,但我似乎无法获得 AKG 号码。请注意,我不需要“AKG”,只需要数字。

我会提到:我正在创建一个 DataFrame,因为在使用数据创建绘图时这将更容易使用......对吗?我愿意接受一系列列表等,或者任何更简单的方法,如果这最终会帮助我处理这些情节。

    akg_time = []
    akg_akg = []
    technicals = akg_data['Technicals']  #akg_data is the entire json file

    for item in technicals:  #this works
         akg_time.append(item)

    for item in technicals:  #this not so much
         symbol = item.get('AKG')
         akg_akg.append(symbol)

    pp.pprint(akg_akg)
    error: 'str' object has no attribute 'get'

【问题讨论】:

    标签: python json extraction


    【解决方案1】:

    你几乎得到它。你甚至不需要第二个循环。您可以在第一个本身中附加 akg 值:

    for key in technicals: # renaming to key because that is a clearer name
         akg_time.append(key)
         akg_akg.append(technicals[key]['AKG'])
    

    您的错误是因为您认为item(或key)是一个字典。它不是。它只是一个字符串,是technicals 字典的 之一,因此您实际上需要使用symbols = technicals[key].get('AKG')

    【讨论】:

    • 我知道这将是最简单的答案。谢谢你。可能应该刚上床睡觉,明天再看一遍。 “技术[key]”是我一直想念的。
    • 哦,感谢关于“key”重命名的建议。这确实更有意义,并且更容易遵循代码的逻辑。
    • @PatrickGalt 很高兴为您提供帮助。不要忘记,如果有帮助,您总是可以接受这个答案。干杯:)
    • 你能支持我的问题吗?由于一些自尊心受到伤害,我处于“问题炼狱”中……也就是说,他们没有继续前进,而是决定对我的问题(上一个问题)发牢骚和抱怨……这已经很容易地得到了回答。谢谢!
    【解决方案2】:

    虽然 Coldspeed 的答案是正确的:当你有一本字典时,你会像这样遍历键和值:

    Python 3

    for key,value in technicals.items():
         akg_time.append(key)
         akg_akg.append(value["akg"])
    

    Python 2

    for key,value in technicals.iteritems():
         akg_time.append(key)
         akg_akg.append(value["akg"])
    

    【讨论】:

    • 记住这是在内存中创建一个新列表,复制所有的键和值,所以它肯定不如只遍历键高效。
    • 现在等一下?这里分配了一个字典:技术 = akg_data ['技术']。那真的会创建一个新列表吗?没有意义。我错过了什么?
    • 只是分配了引用。它是 O(1)。我的意思是technicals.items()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多