首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中将JSON更改为Dataframe

在python中将JSON更改为Dataframe
EN

Stack Overflow用户
提问于 2020-08-21 08:24:53
回答 2查看 82关注 0票数 0

我希望通过将数据下的列更改为dataframe,将API响应更改为dataframe。注意,它还在data (message)下面有一些嵌套参数,我想让它成为单独的列。

代码语言:javascript
运行
复制
{
    'success': True,
    'code': 200,
    'data': [
        {
            'id': 342964769,
            'type': 'ios',
            'create_time': 1567591650,
            'open_count': 2,
            'environment': 'production',
            'campaign_id': 12713145,
            'project_id': 1758,
            'error': 0,
            'sent_count': 3,
            'message': {
                'timestamp': '1567591643',
                'badge': '',
                'alert': "'I pulled pints and cut turf here back in the day' - Mike Pence speaks to "
                                 "small crowd in Doonbeg",
                'sound': 'default',
                'articleId': '38465289',
                'category': 'news/',
                'id': '342964769',
                'pushId': 'fireabse-5d6f8cdb8c3e9',
                'title': 'Independent.ie',
                'content-available': '1',
                'xpush': 'yes',
                'cid': '12713145'
            },
            'error_message': None
        }, {
            'id': 342964771,
            'type': 'android',
            'create_time': 1567591650,
            'open_count': 0,
            'environment': 'production',
            'campaign_id': 12713145,
            'project_id': 1758,
            'error': 0,
            'sent_count': 0,
            'message': None,
            'error_message': None
        }
    ]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-21 16:24:14

这就是你想要的?

代码语言:javascript
运行
复制
def dict_pop(d, *args):
    v = d.pop(*args)
    return v if v else {}

resp = [{**dict_pop(i,'message'), **i} for i in resp['data']]
resp = pd.DataFrame(resp)
票数 1
EN

Stack Overflow用户

发布于 2020-08-21 14:16:51

您可以通过删除message级别并使字典的每个条目成为父字典的一部分来平平字典:

代码语言:javascript
运行
复制
import pandas as pd
import copy

data = {
    'success': True,
    'code': 200,
    'data': [
        {
            'id': 342964769,
            'type': 'ios',
            'create_time': 1567591650,
            'open_count': 2,
            'environment': 'production',
            'campaign_id': 12713145,
            'project_id': 1758,
            'error': 0,
            'sent_count': 3,
            'message': {
                'timestamp': '1567591643',
                'badge': '',
                'alert': "'I pulled pints and cut turf here back in the day' - Mike Pence speaks to "
                                 "small crowd in Doonbeg",
                'sound': 'default',
                'articleId': '38465289',
                'category': 'news/',
                'id': '342964769',
                'pushId': 'fireabse-5d6f8cdb8c3e9',
                'title': 'Independent.ie',
                'content-available': '1',
                'xpush': 'yes',
                'cid': '12713145'
            },
            'error_message': None
        }, {
            'id': 342964771,
            'type': 'android',
            'create_time': 1567591650,
            'open_count': 0,
            'environment': 'production',
            'campaign_id': 12713145,
            'project_id': 1758,
            'error': 0,
            'sent_count': 0,
            'message': None,
            'error_message': None
        }
    ]
}

processed = []
for dat in data["data"]:
    new_dat = copy.deepcopy(dat)  # only important if the original data matters to you
    if "message" in new_dat and new_dat["message"]:
        message = new_dat.pop("message")
        new_dat.update(message)
    processed.append(new_dat)

df = pd.DataFrame(processed)
print(df.columns)

输出:

代码语言:javascript
运行
复制
Index(['id', 'type', 'create_time', 'open_count', 'environment', 'campaign_id',
       'project_id', 'error', 'sent_count', 'error_message', 'timestamp',
       'badge', 'alert', 'sound', 'articleId', 'category', 'pushId', 'title',
       'content-available', 'xpush', 'cid', 'message'],
      dtype='object')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63519222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档