0

以下は、base64 でデコードされた私の Json ファイルです。

response={"response": [{"objcontent": [{"title": "Pressure","rowkeys": [
                    "lat",
                    "lon",
                    "Pressure"
                ],
                "rowvalues": [
                    [
                        "WxsArK0NV0A=",
                        "uaQCWFxSM0A=",
                        "ncvggc7lcUA6MVVLnZiMQH6msaA+0yhANzLp2RsZhkBwobfXt9BXQKtxbnjV+IFARq3fVqOWiEBwyyvmt+V9QDGg7k8YUHpA4IZm9W/De0A="
                    ],
                    [
                        "WxsArK0NV0A=",
                        "HqJT4w7RUkA=",
                        "BfPox4I5ikCLVYxUxWqIQIFwlJFA+IVAJeQ6gBLyhEBB0QlkoGiCQDOkvnAZUm1AkGbWKEgza0A+FCkwH4phQHwSRSY+iVRAKcvC4pRliEA="
                    ],
                    [
                        "WxsArK0NV0A=",
                        "G5rYdw0NXkA=",
                        "C9dhhIVrg0B2hCvzOoKKQMrMWhll5o5AIujgxBB0ZkD8+EipfXx0QOXh0LLycH5ATdtxKqbtdkAw66X3l/VhQLqvZBbd13FAjKl2+8UUjUA="
                    ],
                    [
                        "WxsArK0NV0A=",
                        "PTvsm55daEA=",
                        "W+wyHC12dUCrvSLM1d6BQMfay0ZjbYpAjnk4Ecc8dkDH35pL429xQPTOwkF6Z41Aci5JATkXjUBQ6Wjlp3RQQFlpNGmsNHpAFf0DUor+dUA="
                    ]]}]}]}

値をデコードし、これらの値を使用してプロットを描画します。コードは次のとおりです。

import base64
import struct
import numpy as np
import pylab as pl
for response_i in response['response']:
    for row in response_i['objcontent'][0]['rowvalues']:
        for item in row[:]:
            decoded=base64.b64decode(item)
            if len(decoded)<9:
                a=struct.unpack('d',decoded)

            else:
                decoded=base64.b64decode(item)
                a=struct.unpack('10d',decoded)
            last=np.array(a)
            pl.show(pl.plot(last))

しかし、各リストの値を分離したいと思います。「行キー」には 3 つの要素[ "lat", "lon", "Pressure"]があるため、各リストには 3 つの値がありますrowvalues

私の質問は、 の異なる値をどのように分離rowvaluesし、 の各グループに追加するかですrowkeys。そのため、最後に、デコードされたすべての値を含む 3 つのリストがあるとします。

'lat': [WxsArK0NV0A=,WxsArK0NV0A=,WxsArK0NV0A=,WxsArK0NV0A=]

'lon': [uaQCWFxSM0A=,HqJT4w7RUkA=,G5rYdw0NXkA=,PTvsm55daEA=]

'pressure': [ncvggc7lcUA6MVVLnZiMQH6msaA+0yhANzLp2RsZhkBwobfXt9BXQKtxbnjV+IFARq3fVqOWiEBwyyvmt+V9QDGg7k8YUHpA4IZm9W/De0A=, BfPox4I5ikCLVYxUxWqIQIFwlJFA+IVAJeQ6gBLyhEBB0QlkoGiCQDOkvnAZUm1AkGbWKEgza0A+FCkwH4phQHwSRSY+iVRAKcvC4pRliEA=, C9dhhIVrg0B2hCvzOoKKQMrMWhll5o5AIujgxBB0ZkD8+EipfXx0QOXh0LLycH5ATdtxKqbtdkAw66X3l/VhQLqvZBbd13FAjKl2+8UUjUA=, W+wyHC12dUCrvSLM1d6BQMfay0ZjbYpAjnk4Ecc8dkDH35pL429xQPTOwkF6Z41Aci5JATkXjUBQ6Wjlp3RQQFlpNGmsNHpAFf0DUor+dUA=] 
4

1 に答える 1

0

1 つの方法は、次のようにデータを手動で並べ替えることです。

from collections import defaultdict
from base64 import b64decode
import json

d = defaultdict(list)

js = ''
with open(json_file) as f:
    js = b64decode(f.read()).decode()
js = json.loads(js)

response = js['response']['obj_content'][0] 
for i, col_name in enumerate(response['row_keys']):
    for row_val in ['row_values']:
        d[col_name].append(row_val[i])

defaultdictlist以前は存在しなかったキーが呼び出されると、自動的に新しいキーが作成されます。これにより、コードが少し洗練されたものになります。

別のオプションは、pandas.DataFrame次のようにデータを使用してロードすることです。

import pandas as pd
response = json_file['response']['obj_content'][0]
df = pd.DataFrame(response['row_values'], columns= response['row_keys'])

優れた点pandasは、その機能が非常に広範囲であることです。たとえば、次のDataFrameように、以前に作成した を使用してデータをプロットできます。

df.plot()
于 2016-12-06T12:45:57.530 に答える