質問編集履歴

2 情報の追加

kaitotokai

kaitotokai score 49

2018/07/04 18:44  投稿

連続したjsonをpandasのDataFrameに変換したい
連続したjsonをpandasのDataFrameに変換したい
```ここに言語を入力
{"name":"Tom","age":"29","Type":"A","ADRESS":["W","E"]}
{"name":"Juddy","age":"25","Type":"B","ADRESS":"Q"}
{"name":"John","age":"9","Type":"O","ADRESS":["M","P","C"]}
{"name":"Tom","age":"29","Type":"A","ADRESS":["W","E"], "MAJOR": ["A", "B", "C", "D", "E"]}}
{"name":"Juddy","age":"25","Type":"B","ADRESS":"Q", "MAJOR": ["A", "B", "C", "D", "E"]}}
{"name":"John","age":"9","Type":"O","ADRESS":["M","P","C"], "MAJOR": ["A", "B", "C", "D", "E"]}}
```
というjsonがあります。この連続したjsonをpandasのDataFrameに変換したいです。
```ここに言語を入力
import pandas as pd
import numpy as np
import json
decoder = json.JSONDecoder()
f = open('data.json', 'r')
for line in f.readlines():
   data = decoder.decode(line)
  df = pd.DataFrame(data)
```
とコードを書いて実行すると、
ValueError: arrays must all be same length
とエラーが出ました。Tracebackには
```ここに言語を入力
---------------------------------------------------------------------------
ValueError                               Traceback (most recent call last)
<ipython-input-8-bfb39aca863a> in <module>()
     3 for line in f.readlines():
     4    data = decoder.decode(line)
----> 5    df = pd.DataFrame(data)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
   328                                 dtype=dtype, copy=copy)
   329        elif isinstance(data, dict):
--> 330            mgr = self._init_dict(data, index, columns, dtype=dtype)
   331        elif isinstance(data, ma.MaskedArray):
   332            import numpy.ma.mrecords as mrecords
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _init_dict(self, data, index, columns, dtype)
   459            arrays = [data[k] for k in keys]
   460
--> 461        return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
   462
   463    def _init_ndarray(self, values, index, columns, dtype=None, copy=False):
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _arrays_to_mgr(arrays, arr_names, index, columns, dtype)
  6161    # figure out the index, if necessary
  6162    if index is None:
-> 6163        index = extract_index(arrays)
  6164    else:
  6165        index = _ensure_index(index)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in extract_index(data)
  6209            lengths = list(set(raw_lengths))
  6210            if len(lengths) > 1:
-> 6211                raise ValueError('arrays must all be same length')
  6212
  6213            if have_dicts:
```
と出ました。
```ここに言語を入力
  name   age   Type
0    Tom     29      A
1     Juddy  25      B
2    John     9       O
```
という形のDataFrameを作りたいです。何が問題でどうコードを修正すればいいでしょうか?
  • NumPy

    745 questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

  • Python 3.x

    11557 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • pandas

    1107 questions

    Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1 情報の修正

kaitotokai

kaitotokai score 49

2018/07/04 18:38  投稿

連続したjsonをpandasのDataFrameに変換したい
連続したjsonをpandasのDataFrameに変換したい
```ここに言語を入力
{"name":"Tom","age":"29","Type":"A"}
{"name":"Juddy","age":"25","Type":"B"}
{"name":"John","age":"9","Type":"O"}
{"name":"Tom","age":"29","Type":"A","ADRESS":["W","E"]}
{"name":"Juddy","age":"25","Type":"B","ADRESS":"Q"}
{"name":"John","age":"9","Type":"O","ADRESS":["M","P","C"]}
```
というjsonがあります。この連続したjsonをpandasのDataFrameに変換したいです。
```ここに言語を入力
import pandas as pd
import numpy as np
import json
decoder = json.JSONDecoder()
f = open('data.json', 'r')
for line in f.readlines():
   data = decoder.decode(line)
  df = pd.DataFrame(data)
```
とコードを書いて実行すると、
ValueError: arrays must all be same length
とエラーが出ました。Tracebackには
```ここに言語を入力
---------------------------------------------------------------------------
ValueError                               Traceback (most recent call last)
<ipython-input-8-bfb39aca863a> in <module>()
     3 for line in f.readlines():
     4    data = decoder.decode(line)
----> 5    df = pd.DataFrame(data)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in __init__(self, data, index, columns, dtype, copy)
   328                                 dtype=dtype, copy=copy)
   329        elif isinstance(data, dict):
--> 330            mgr = self._init_dict(data, index, columns, dtype=dtype)
   331        elif isinstance(data, ma.MaskedArray):
   332            import numpy.ma.mrecords as mrecords
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _init_dict(self, data, index, columns, dtype)
   459            arrays = [data[k] for k in keys]
   460
--> 461        return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
   462
   463    def _init_ndarray(self, values, index, columns, dtype=None, copy=False):
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in _arrays_to_mgr(arrays, arr_names, index, columns, dtype)
  6161    # figure out the index, if necessary
  6162    if index is None:
-> 6163        index = extract_index(arrays)
  6164    else:
  6165        index = _ensure_index(index)
~/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py in extract_index(data)
  6209            lengths = list(set(raw_lengths))
  6210            if len(lengths) > 1:
-> 6211                raise ValueError('arrays must all be same length')
  6212
  6213            if have_dicts:
```
と出ました。
```ここに言語を入力
  name   age   Type
0    Tom     29      A
1     Juddy  25      B
2    John     9       O
```
という形のDataFrameを作りたいです。何が問題でどうコードを修正すればいいでしょうか?
  • NumPy

    745 questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

  • Python 3.x

    11557 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • pandas

    1107 questions

    Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る