2016-12-22 9 views
1

私はPythonを初めて使っているので誰も私を助けることができますか?JSONファイルをDataframeに読み込むにはどうすればよいですか?

 CLOSE  TIMESTAMP 
0  41.85  2016-09-22T00:00:00+00:00 
1  41.37  2016-09-23T00:00:00+00:00 
2  40.88  2016-09-26T00:00:00+00:00 
3  40.98  2016-09-27T00:00:00+00:00 

私がしたい場合:

私はこのように、構造化データフレームを作成しようとしています(。すなわちfile12.json)

{ 
    "TimeSeries": { 
     "Row": [ 
      { 
       "CLOSE": 41.85, 
       "TIMESTAMP": "2016-09-22T00:00:00+00:00" 
      }, 
      { 
       "CLOSE": 41.37, 
       "TIMESTAMP": "2016-09-23T00:00:00+00:00" 
      }, 
      { 
       "CLOSE": 40.88, 
       "TIMESTAMP": "2016-09-26T00:00:00+00:00" 
      }, 
      { 
       "CLOSE": 40.98, 
       "TIMESTAMP": "2016-09-27T00:00:00+00:00" 
      }, 
      { 
       "CLOSE": 44.33, 
       "TIMESTAMP": "2016-12-21T00:00:00+00:00" 
      } 
     ] 
    } 
} 

JSONファイルに次の内容を持っています私は単純に 'read_csv'を使用しますが、read_pythonは異なる出力を生成します。

私はこのコードを使用しました

...

file = pd.read_json('file12.json') 
print file 

...しかし、形式はなく、かなり私はそれをしたい方法です。私は次のようになります:

TimeSeries 
Row [{u'CLOSE': 41.85, u'TIMESTAMP': u'2016-09-22T... 

です。すべてがフォーマットされた表ではなく、単純に1つの行にあります。

誰でも助けてくれますか?してください: - )

答えて

2

マッキニーにより、データ分析ためのPython で、彼はあなたがJSONオブジェクトまたはオブジェクトのリストが分析のためのデータフレームまたは他のデータ構造に変換する方法

が最大になると言います君は。

jsonストリングのrows値一部

import json 
import pandas as pd 
with open('file12.json') as json_data: 
    obj = json.load(json_data) 
    frame = pd.DataFrame(obj['TimeSeries']['Row'], columns=['CLOSE', 'TIMESTAMP']) 
2

(メーリングリストへ、このテストされていないコード)、これを試してください:

In [454]: txt1="""[ 
    ...:    { 
    ...:     "CLOSE": 41.85, 
    ...:     "TIMESTAMP": "2016-09-22T00:00:00+00:00" 
    ...:    }, 
    ...:    { 
    ...:     "CLOSE": 41.37, 
    ...:     "TIMESTAMP": "2016-09-23T00:00:00+00:00" 
    ...:    }, 
    ...:    { 
    ...:     "CLOSE": 40.88, 
    ...:     "TIMESTAMP": "2016-09-26T00:00:00+00:00" 
    ...:    }, 
    ...:    { 
    ...:     "CLOSE": 40.98, 
    ...:     "TIMESTAMP": "2016-09-27T00:00:00+00:00" 
    ...:    }, 
    ...:    { 
    ...:     "CLOSE": 44.33, 
    ...:     "TIMESTAMP": "2016-12-21T00:00:00+00:00" 
    ...:    } 
    ...:   ]""" 

リストとして解析し:

In [449]: json.loads(txt1) 
Out[449]: 
[{'CLOSE': 41.85, 'TIMESTAMP': '2016-09-22T00:00:00+00:00'}, 
{'CLOSE': 41.37, 'TIMESTAMP': '2016-09-23T00:00:00+00:00'}, 
{'CLOSE': 40.88, 'TIMESTAMP': '2016-09-26T00:00:00+00:00'}, 
{'CLOSE': 40.98, 'TIMESTAMP': '2016-09-27T00:00:00+00:00'}, 
{'CLOSE': 44.33, 'TIMESTAMP': '2016-12-21T00:00:00+00:00'}] 

パンダに罰金( datetime64種類、convert_dates=Trueデフォルト)のように、日付terpreting:

In [451]: df=pd.read_json(txt1) 
In [452]: df 
Out[452]: 
    CLOSE TIMESTAMP 
0 41.85 2016-09-22 
1 41.37 2016-09-23 
2 40.88 2016-09-26 
3 40.98 2016-09-27 
4 44.33 2016-12-21 
In [453]: df.dtypes 
Out[453]: 
CLOSE    float64 
TIMESTAMP datetime64[ns] 
dtype: object 

をしかし@Alexとして、あなたが最初json.loadsで解析し、その辞書の一部をロードすることによって、変換をより詳細に制御を持っていることが示されています。 obj['TimeSeries']['Row']はこれと同じリストです。

In [455]: dd = json.loads(txt) 
In [456]: dd 
Out[456]: 
{'TimeSeries': {'Row': [{'CLOSE': 41.85, 
    'TIMESTAMP': '2016-09-22T00:00:00+00:00'}, 
    {'CLOSE': 41.37, 'TIMESTAMP': '2016-09-23T00:00:00+00:00'}, 
    {'CLOSE': 40.88, 'TIMESTAMP': '2016-09-26T00:00:00+00:00'}, 
    {'CLOSE': 40.98, 'TIMESTAMP': '2016-09-27T00:00:00+00:00'}, 
    {'CLOSE': 44.33, 'TIMESTAMP': '2016-12-21T00:00:00+00:00'}]}} 
In [457]: pd.read_json(json.dumps(dd['TimeSeries']['Row'])) 
Out[457]: 
    CLOSE TIMESTAMP 
0 41.85 2016-09-22 
1 41.37 2016-09-23 
2 40.88 2016-09-26 
3 40.98 2016-09-27 
4 44.33 2016-12-21 

は、あなたも、外側の層を取り除くためにjson往復を取ることができます

関連する問題