For 循环 Return 全部

For Loop Return All

我有一个 Pandas 数据框,每行有 json 个字符串。我想 运行 一个 for 循环到 json_normalize 每一行并将数据带回另一个数据框,这样我就可以访问某些 key_value 对。

我的函数如下所示:

for line in df:
        json_normalize(line)

这会打印出我想要的数据,但我想将其放入一个对象中,以便我可以将其作为数据框读取并对其执行操作。 数据是这样的:

3     [{u'from': {u'name': u'Aaron Roth', u'id': u'1...
5     [{u'from': {u'name': u'Elle Oh', u'id': u'1020...
6     [{u'from': {u'name': u'Chris Magorian', u'id':...
7     [{u'from': {u'name': u'Jimmy George', u'id': u...
8     [{u'from': {u'name': u'A'raelle Flynn-Bolden',...
12    [{u'from': {u'name': u'Aaron Roth', u'id': u'1...
13    [{u'from': {u'name': u'A'raelle Flynn-Bolden',...
16    [{u'from': {u'name': u'Matthew Emery', u'id': ...
17    [{u'from': {u'name': u'Elle Oh', u'id': u'1020...
18    [{u'from': {u'name': u'Gyasi Silas', u'id': u'...
19    [{u'from': {u'name': u'Alice Magorian', u'id':...
23    [{u'from': {u'name': u'Jonathan Jayasinghe', u...
24    [{u'from': {u'name': u'Aaron Roth', u'id': u'1...

您可以在 json-text 列上使用 map 方法来应用 lambda 函数,该函数将使用 json.loads 解析 json 然后return你想要的字段。

import json

name = df.json_text.map(lambda s: json.loads(s)['from']['name'])
id = df.json_text.map(lambda s: json.loads(s)['from']['id'])

flattened = pd.DataFrame({'name':name, 'id',id})

或者,如果您想一次引入所有 "from" 字段(如果该字段中没有进一步嵌套),您可以简单地调用

flattened = pd.DataFrame(name = df.json_text.map(lambda s: json.loads(s)['from']['name'])