我正在从数据库(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
答案 0 :(得分:8)
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'])
答案 1 :(得分:7)
我认为您可以先将string
列data
转换为dict
,然后按values
和{{}} list
创建numpy arrays
3}}:
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))
答案 2 :(得分:0)
data = {“事件”:[
{
“ timemillis”:1563467463580, “ date”:“ 18.7.2019”, “ time”:“ 18:31:03,580”, “ name”:“播放器正在加载”, “数据”:”” }, {
“ timemillis”:1563467463668, “ date”:“ 18.7.2019”, “ time”:“ 18:31:03,668”, “ name”:“播放器已加载”, “数据”:“ 5” }]}
from pandas.io.json import json_normalize
result = json_normalize(data,'events')
print(result)