我有一个熊猫数据框,它的形状如下。

如您所见,列实体有一个由JSON对象组成的np数组,有时,它是空的。我想通过获取前5个JSON对象将此列展平到数据框中。每个JSON对象都有索引(name、type、mid、wikipediaUrl、numMentions、avgSalience),但是每行中的对象数量从non到30或40不等。这是一个最小的可重复性样本。
import json
dict0 = [{'name': 'require-once', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, 'avgSalience': 0.014624}, {'name': 'require_once', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, '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', 'type': 'UNKNOWN', 'mid': '/m/03g20', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/HTML', 'numMentions': 28, 'avgSalience': 0.007139}, {'name': 'public_html', 'type': 'PERSON', 'mid': None, 'wikipediaUrl': None, 'numMentions': 1, 'avgSalience': 0.007139}]
dict1 = [{'name': 'require-once1', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, 'avgSalience': 0.014624}, {'name': 'require_once', 'type': 'OTHER', 'mid': None, 'wikipediaUrl': None, 'numMentions': 4, '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', 'type': 'UNKNOWN', 'mid': '/m/03g20', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/HTML', 'numMentions': 28, '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提前谢谢。
发布于 2021-07-07 03:03:52
您可以读取列元素,并从中创建一个新的数据帧,然后将它们连接在一起:
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)https://stackoverflow.com/questions/68274802
复制相似问题