我有一个json对象,
{
"hits": {
"hits": [
{
"_source": {
"TYPES": [
{
"_ID": 130,
"_NM": "ARB-130"
},
{
"_ID": 131,
"_NM": "ARB-131"
},
{
"_ID": 132,
"_NM": "ARB-132"
}
]
}
},
{
"_source": {
"TYPES": [
{
"_ID": 902,
"_NM": "ARB-902"
},
{
"_ID": 903,
"_NM": "ARB-903"
},
{
"_ID": 904,
"_NM": "ARB-904"
}
]
}
}
]
}
}
我需要将它解压缩到pandas数据帧中,以便在_types对象下获得所有唯一的_id和_nm对
_ID _NM
0 130 ARB-130
1 131 ARB-131
2 132 ARB-132
3 902 ARB-902
4 903 ARB-903
5 904 ARB-904
我正在寻找最快的解决方案,因为类型中的类型数和对数可以达到数十万。所以我使用pd.Series解压缩并使用apply会使它变慢,如果可能的话我想避免使用它。任何想法,将不胜感激。还有关于将列中的字典或列表爆炸成单独的列而不使用pd.Series,因为我在常规中遇到此用例
答案 0 :(得分:2)
一种方法是重新构建字典并使用itertools.chain
展平。
为了提高性能,您应该对数据进行基准测试。
from itertools import chain
res = list(chain.from_iterable(i['_source']['TYPES'] for i in d['hits']['hits']))
df = pd.DataFrame(res)
print(df)
_ID _NM
0 130 ARB-130
1 131 ARB-131
2 132 ARB-132
3 902 ARB-902
4 903 ARB-903
5 904 ARB-904