如何解决Pandas 列有一个 np json 对象数组
如您所见,列实体有一个 JSON 对象的 np 数组,有时它是空的。 我想通过获取前 5 个 JSON 对象将此列展平到数据框中。 每个 JSON 对象都有索引(名称、类型、mid、wikipediaUrl、numMentions、avgSalience),但每行中的对象数量从非到 30 或 40 不等。 这是一个可重现的最小样本。
import json
dict0 = [{'name': 'require-once','type': 'OTHER','mid': None,'wikipediaUrl': None,'numMentions': 4,'avgSalience': 0.014624},{'name': 'require_once','avgSalience': 0.008366},{'name': 'funkytaurusmedia.com/includes/header.PHP','type': 'UNKNowN','mid': '/m/02dnj_','wikipediaUrl': 'https://en.wikipedia.org/wiki/Header_(computing)','numMentions': 2,'avgSalience': 0.007887},{'name': 'public_html','mid': '/m/03g20','wikipediaUrl': 'https://en.wikipedia.org/wiki/HTML','numMentions': 28,'avgSalience': 0.007139},'type': 'PERSON','numMentions': 1,'avgSalience': 0.007139}]
dict1 = [{'name': 'require-once1','avgSalience': 0.007139}]
df = pd.DataFrame({"date":{0:1522254600000,1:1132254600000 },"url":{0:"http",1:"http1"},"lang":{0:"de",1:"de"},"polarity":{0:-0.8,1:0.8},"magnitude":{0:10.3,1:11},"score":{0:-0.5,1:0.5},"entities": {0:dict0,1:dict1}})
df
提前致谢。
解决方法
您可以读取列元素,并从中创建一个新的数据框,然后将它们连接在一起:
df.join(pd.DataFrame(df['entities'].tolist()))
date url ... numMentions avgSalience
0 1522254600000 http ... 4 0.014624
1 1522254600000 http ... 4 0.008366
2 1522254600000 http ... 2 0.007887
3 1522254600000 http ... 28 0.007139
4 1522254600000 http ... 1 0.007139
[5 rows x 13 columns]
对于你的第二个例子,你可以试试这个:
pd.concat(df.apply(lambda row: pd.DataFrame(row['entities'],[row['date']]*len(row['entities'])),axis=1).values)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。