web-dev-qa-db-ja.com

JSON列をPandasデータフレームに高速変換

1つの列がJSONとして格納されているデータベース(5万行以上)からデータを読み取っています。これをpandasデータフレームに抽出したいと思います。以下のスニペットは正常に機能しますが、かなり効率が悪く、db全体に対して実行すると本当に時間がかかります。すべてのアイテムが同じ属性を持っているわけではなく、 JSONにいくつかのネストされた属性があること。

どうすればこれを速くできますか?

import pandas as pd
import json

df = pd.read_csv('http://Pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])

df.data.apply(json.loads) \
       .apply(pd.io.json.json_normalize)\
       .pipe(lambda x: pd.concat(x.values))
###this returns a dataframe where each JSON key is a column
14
jodoox

json_normalize は、処理済みのjson文字列またはpandasそのような文字列のシリーズを受け取ります。

pd.io.json.json_normalize(df.data.apply(json.loads))

設定

import pandas as pd
import json

df = pd.read_csv('http://Pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])
20
piRSquared

最初にstringdatadictに変換し、次にlist of numpy arraysvalues および最後 DataFrame.from_records

df = pd.read_csv('http://Pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])

a = df.data.apply(json.loads).values.tolist() 
print (pd.DataFrame.from_records(a))
11
jezrael

データ= {「イベント」:[
{
"timemillis":1563467463580、 "date": "18.7.2019"、 "time": "18:31:03,580"、 "name": "プレーヤーがロード中"、 "data": ""} 、{
"timemillis":1563467463668、 "date": "18.7.2019"、 "time": "18:31:03,668"、 "name": "プレーヤーが読み込まれました"、 "data": "5" }]}

from pandas.io.json import json_normalize
result = json_normalize(data,'events')
print(result)
0
Madhur Yadav