将JSON列快速转换为Pandas数据帧

jod*_*oox 9 python json pandas

我正在从数据库(50k +行)读取数据,其中一列存储为JSON.我想把它提取到一个pandas数据帧中.下面的代码片段工作正常,但效率相当低,并且在对整个数据库运行时真的需要永远.请注意,并非所有项都具有相同的属性,并且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
Run Code Online (Sandbox Code Playgroud)

piR*_*red 14

json_normalize采用已处理的json字符串或pandas系列此类字符串.

pd.io.json.json_normalize(df.data.apply(json.loads))
Run Code Online (Sandbox Code Playgroud)

建立

import pandas as pd
import json

df = pd.read_csv('http://pastebin.com/raw/7L86m9R2', \
                 header=None, index_col=0, names=['data'])
Run Code Online (Sandbox Code Playgroud)


jez*_*ael 9

我觉得你可以先转换stringdatadict,然后创建listnumpy arrays通过values和最后一个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))
Run Code Online (Sandbox Code Playgroud)