将 Python JSON 文件转换为 Pandas DataFrame

Posted

技术标签:

【中文标题】将 Python JSON 文件转换为 Pandas DataFrame【英文标题】:Converting Python JSON File Into Pandas DataFrame 【发布时间】:2018-03-11 13:41:59 【问题描述】:

我有以下 Json 文件:

Json = json.loads(resp.text)
print pprint.pprint(Json)

Response:

u'data': [u'assignedUser': None,
            u'author': u'authorData': u'blogId': u'4050964395',
                        u'authorFullName': None,
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'2568086880',
                        u'externalLegacyId': None,
                        u'id': u'29011839',
                        u'influence': u'score': 550,
                        u'socialNetworkTypeName': u'Twitter Profile Author',
                        u'tags': None,
                        u'title': None,
                        u'verified': None,
            u'classification': None,
            u'comments': [],
            u'content': None,
            u'engagement': None,
            u'entities': None,
            u'externalId': u'913186147185991680',
            u'externalLink': u'coms:stwittercomss2568086880sstatusess913186147185991680',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T23:38:50Z',
            u'id': u'688342654654',
            u'languageId': None,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'10',
                               u'mediaTypeId': 8,
                               u'title': u'TWITTER',
            u'metadata': None,
            u'parent': u'externalId': u'912930603221127168',
            u'parentAuthor': u'authorData': u'blogId': u'6297935084',
                              u'authorFullName': None,
                              u'avatar': None,
                              u'bio': None,
                              u'comments': None,
                              u'externalId': u'4861615638',
                              u'externalLegacyId': None,
                              u'id': u'330423308',
                              u'influence': None,
                              u'socialNetworkTypeName': None,
                              u'tags': None,
                              u'title': None,
                              u'verified': None,
            u'postDynamics': [],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T23:38:38Z',
            u'regionId': None,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': 0],
            u'source': u'comments': [],
                        u'externalLink': u'twittercoms',
                        u'id': u'4050964395',
                        u'language': None,
                        u'region': None,
                        u'tags': [],
                        u'title': None,
                        u'verified': None,
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': None,
            u'topics': [1133213],
            u'workflowHistory': [],
           u'assignedUser': None,
            u'author': u'authorData': u'blogId': u'4050964395',
                        u'authorFullName': None,
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'2568086880',
                        u'externalLegacyId': None,
                        u'id': u'29011839',
                        u'influence': u'score': 550,
                        u'socialNetworkTypeName': u'Twitter Profile Author',
                        u'tags': None,
                        u'title': None,
                        u'verified': None,
            u'classification': None,
            u'comments': [],
            u'content': None,
            u'engagement': None,
            u'entities': u'hashtags': None,
                          u'media': [u'description': None,
                                      u'display_url': u'pictwittercomsstbK8mF4vHO',
                                      u'expanded_url': u'htptwittercomssigaitokamonesstatuss912684996690812928sphotos1',
                                      u'id': u'912684878763659264',
                                      u'indices': [27, 50],
                                      u'media_url': u'coms:spbstwimgcomssmediasDKqCD8aUEAAX9qzjpg',
                                      u'media_url_comss': u'htppbstwimgcomssmediasDKqCD8aUEAAX9qzjpg',
                                      u'target_url': None,
                                      u'title': None,
                                      u'type': u'photo',
                                      u'url': u'htptcostbK8mF4vHO',
                                      u'video_info': None,
                                     u'description': None,
                                      u'display_url': u'pictwittercomsstbK8mF4vHO',
                                      u'expanded_url': u'htptwittercomssigaitokamonesstatuss912684996690812928sphotos1',
                                      u'id': u'912684910049058816',
                                      u'indices': [27, 50],
                                      u'media_url': u'coms:spbstwimgcomssmediasDKqCFw9VYAAYsOdjpg',
                                      u'media_url_comss': u'htppbstwimgcomssmediasDKqCFw9VYAAYsOdjpg',
                                      u'target_url': None,
                                      u'title': None,
                                      u'type': u'photo',
                                      u'url': u'htptcostbK8mF4vHO',
                                      u'video_info': None,
                                     u'description': None,
                                      u'display_url': u'pictwittercomsstbK8mF4vHO',
                                      u'expanded_url': u'htptwittercomssigaitokamonesstatuss912684996690812928sphotos1',
                                      u'id': u'912684937341394944',
                                      u'indices': [27, 50],
                                      u'media_url': u'coms:spbstwimgcomssmediasDKqCHWoVYAAqqMAjpg',
                                      u'media_url_comss': u'htppbstwimgcomssmediasDKqCHWoVYAAqqMAjpg',
                                      u'target_url': None,
                                      u'title': None,
                                      u'type': u'photo',
                                      u'url': u'htptcostbK8mF4vHO',
                                      u'video_info': None,
                                     u'description': None,
                                      u'display_url': u'pictwittercomsstbK8mF4vHO',
                                      u'expanded_url': u'htptwittercomssigaitokamonesstatuss912684996690812928sphotos1',
                                      u'id': u'912684966760161281',
                                      u'indices': [27, 50],
                                      u'media_url': u'coms:spbstwimgcomssmediasDKqCJEOUIAEnVD-jpg',
                                      u'media_url_comss': u'htppbstwimgcomssmediasDKqCJEOUIAEnVD-jpg',
                                      u'target_url': None,
                                      u'title': None,
                                      u'type': u'photo',
                                      u'url': u'htptcostbK8mF4vHO',
                                      u'video_info': None],
                          u'mentions': None,
                          u'urls': None,
            u'externalId': u'913185982639304704',
            u'externalLink': u'coms:stwittercomss2568086880sstatusess913185982639304704',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T23:38:11Z',
            u'id': u'688342490373',
            u'languageId': None,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'10',
                               u'mediaTypeId': 8,
                               u'title': u'TWITTER',
            u'metadata': None,
            u'parent': u'externalId': u'912684996690812928',
            u'parentAuthor': u'authorData': u'blogId': u'237430348',
                              u'authorFullName': None,
                              u'avatar': None,
                              u'bio': None,
                              u'comments': None,
                              u'externalId': u'2689515817',
                              u'externalLegacyId': None,
                              u'id': u'112855989',
                              u'influence': None,
                              u'socialNetworkTypeName': None,
                              u'tags': None,
                              u'title': None,
                              u'verified': None,
            u'postDynamics': [],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T23:37:59Z',
            u'regionId': None,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': 0],
            u'source': u'comments': [],
                        u'externalLink': u'twittercoms',
                        u'id': u'4050964395',
                        u'language': None,
                        u'region': None,
                        u'tags': [],
                        u'title': None,
                        u'verified': None,
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': None,
            u'topics': [1133213],
            u'workflowHistory': [],
           u'assignedUser': None,
            u'author': u'authorFullName': u'Harry M',
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'-1',
                        u'externalLegacyId': None,
                        u'id': u'-1',
                        u'socialNetworkTypeName': None,
                        u'tags': None,
                        u'title': u'Harry M',
                        u'verified': False,
            u'classification': None,
            u'comments': [],
            u'content': u"we'll have to wait and see if this one is vapourware, like the FF91",
            u'engagement': None,
            u'entities': None,
            u'externalId': u'z22osbpbsvj3hd1euacdp43aqlqerg0o1gv1t14dom1w03c010c',
            u'externalLink': u'coms:swwwyoutubecomsswatch?v=ePJ8xcL3HAE#z22osbpbsvj3hd1euacdp43aqlqerg0o1gv1t14dom1w03c010c',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T23:17:17Z',
            u'id': u'688337451911',
            u'languageId': 1,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'777',
                               u'mediaTypeId': 11,
                               u'title': u'YouTube Comments',
            u'metadata': None,
            u'parent': u'externalId': u'ePJ8xcL3HAE',
                        u'id': u'655094359463',
            u'postDynamics': [],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T22:22:21Z',
            u'regionId': 249,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': 0],
            u'source': u'comments': [],
                        u'externalLink': u'youtubecoms',
                        u'id': u'5631651605',
                        u'language': u'en',
                        u'region': None,
                        u'tags': [],
                        u'title': u'Harry M on Lucid Air (2019) Tesla Model S killer [YOUCAR] ',
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': u'Harry M on Lucid Air (2019) Tesla Model S killer [YOUCAR] ',
            u'topics': [1133213],
            u'workflowHistory': [],
           u'assignedUser': None,
            u'author': u'authorFullName': u'Bruce Magnus',
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'-1',
                        u'externalLegacyId': None,
                        u'id': u'-1',
                        u'socialNetworkTypeName': None,
                        u'tags': None,
                        u'title': u'Bruce Magnus',
                        u'verified': False,
            u'classification': None,
            u'comments': [],
            u'content': u'Faraday Future has just released their debut 2018 FF91 at CES 2017 It is very much still in its beta phase with a lot of promises One of those is that the car can achieve 0 -60MPH in 239 seconds How does it feel to sit in a car with such a massive amount of power?',
            u'engagement': None,
            u'entities': None,
            u'externalId': u'cFcYnSDRBMs',
            u'externalLink': u'coms:swwwyoutubecomsswatch?v=cFcYnSDRBMs',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T21:28:19Z',
            u'id': u'688311663482',
            u'languageId': 1,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'2',
                               u'mediaTypeId': 2,
                               u'title': u'YouTube',
            u'metadata': None,
            u'parent': None,
            u'postDynamics': [u'label': u'View Count', u'value': u'2',
                              u'label': u'Comment Count', u'value': u'0',
                              u'label': u'Unique Commenters',
                               u'value': u'0',
                              u'label': u'Engagement', u'value': u'0',
                              u'label': u'Likes and Votes',
                               u'value': u'0',
                              u'label': u'Inbound Links', u'value': u'0'],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T03:09:07Z',
            u'regionId': 249,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': 10],
            u'source': u'comments': [],
                        u'externalLink': u'youtubecoms',
                        u'id': u'7186804057',
                        u'language': u'en',
                        u'region': None,
                        u'tags': [],
                        u'title': u'FF91 Faraday Future - TESTING 0 - 60 MPH IN 24 SECONDS',
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': u'FF91 Faraday Future - TESTING 0 - 60 MPH IN 24 SECONDS',
            u'topics': [1133213],
            u'workflowHistory': [],
           u'assignedUser': None,
            u'author': u'authorData': u'blogId': u'4502740665',
                        u'authorFullName': None,
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'2788814143',
                        u'externalLegacyId': None,
                        u'id': u'30430561',
                        u'influence': u'score': 80,
                        u'socialNetworkTypeName': u'Twitter Profile Author',
                        u'tags': None,
                        u'title': None,
                        u'verified': None,
            u'classification': None,
            u'comments': [],
            u'content': None,
            u'engagement': None,
            u'entities': u'hashtags': None,
                          u'media': [u'description': None,
                                      u'display_url': u'pictwittercomsstGHUZ2ncMU',
                                      u'expanded_url': u'htptwittercomssAllstonAutosstatuss913103968300969984sphotos1',
                                      u'id': u'913103966023462912',
                                      u'indices': [100, 123],
                                      u'media_url': u'coms:spbstwimgcomssmediasDKv_OCHUMAA-QHSjpg',
                                      u'media_url_comss': u'htppbstwimgcomssmediasDKv_OCHUMAA-QHSjpg',
                                      u'target_url': None,
                                      u'title': None,
                                      u'type': u'photo',
                                      u'url': u'htptcostGHUZ2ncMU',
                                      u'video_info': None],
                          u'mentions': None,
                          u'urls': [u'display_url': u'dlvritsPqs7xk',
                                     u'expanded_url': u'coms:sdlvritsPqs7xk',
                                     u'indices': [76, 99],
                                     u'url': u'htptcosM2xcaQ5Os0'],
            u'externalId': u'913103968300969984',
            u'externalLink': u'coms:stwittercomss2788814143sstatusess913103968300969984',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T18:12:11Z',
            u'id': u'688263442101',
            u'languageId': None,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'10',
                               u'mediaTypeId': 8,
                               u'title': u'TWITTER',
            u'metadata': None,
            u'parent': None,
            u'postDynamics': [],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T18:12:05Z',
            u'regionId': None,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': -10],
            u'source': u'comments': [],
                        u'externalLink': u'twittercoms',
                        u'id': u'4502740665',
                        u'language': None,
                        u'region': None,
                        u'tags': [],
                        u'title': None,
                        u'verified': None,
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': None,
            u'topics': [1133213],
            u'workflowHistory': [],
           u'assignedUser': None,
            u'author': u'authorData': u'blogId': u'6202921586',
                        u'authorFullName': None,
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'2669983818',
                        u'externalLegacyId': None,
                        u'id': u'314584800',
                        u'influence': u'score': 500,
                        u'socialNetworkTypeName': u'Twitter Profile Author',
                        u'tags': None,
                        u'title': None,
                        u'verified': None,
            u'classification': None,
            u'comments': [],
            u'content': None,
            u'engagement': None,
            u'entities': None,
            u'externalId': u'913089957010350080',
            u'externalLink': u'coms:stwittercomss2669983818sstatusess913089957010350080',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T17:16:32Z',
            u'id': u'688249615145',
            u'languageId': None,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'10',
                               u'mediaTypeId': 8,
                               u'title': u'TWITTER',
            u'metadata': None,
            u'parent': None,
            u'postDynamics': [],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T17:16:24Z',
            u'regionId': None,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': 0],
            u'source': u'comments': [],
                        u'externalLink': u'twittercoms',
                        u'id': u'6202921586',
                        u'language': None,
                        u'region': None,
                        u'tags': [],
                        u'title': None,
                        u'verified': None,
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': None,
            u'topics': [1133213],
            u'workflowHistory': [],
           u'assignedUser': None,
            u'author': u'authorData': u'blogId': u'2987515632',
                        u'authorFullName': None,
                        u'avatar': None,
                        u'bio': None,
                        u'comments': None,
                        u'externalId': u'2169387900',
                        u'externalLegacyId': None,
                        u'id': u'46147122',
                        u'influence': u'score': 170,
                        u'socialNetworkTypeName': u'Twitter Profile Author',
                        u'tags': None,
                        u'title': None,
                        u'verified': None,
            u'classification': None,
            u'comments': [],
            u'content': None,
            u'engagement': None,
            u'entities': u'hashtags': None,
                          u'media': None,
                          u'mentions': [u'id': u'10228272',
                                         u'indices': [116, 124],
                                         u'name': u'YouTube',
                                         u'screen_name': u'YouTube',
                                         u'url': None],
                          u'urls': [u'display_url': u'youtubesb6QrF59zLQU?a',
                                     u'expanded_url': u'coms:syoutubesb6QrF59zLQU?a',
                                     u'indices': [88, 111],
                                     u'url': u'htptcosEGPB3xjmSm'],
            u'externalId': u'913089735249268736',
            u'externalLink': u'coms:stwittercomss2169387900sstatusess913089735249268736',
            u'firstEngagementDate': None,
            u'harvestDate': u'2017-09-27T17:15:41Z',
            u'id': u'688249356612',
            u'languageId': None,
            u'latestEngagementDate': None,
            u'mediaProvider': u'extendedMediaType': None,
                               u'id': u'10',
                               u'mediaTypeId': 8,
                               u'title': u'TWITTER',
            u'metadata': None,
            u'parent': None,
            u'postDynamics': [],
            u'postStatus': 0,
            u'postStatusException': None,
            u'priority': None,
            u'publishedDate': u'2017-09-27T17:15:31Z',
            u'regionId': None,
            u'sentiment': [u'overridden': False,
                            u'topicId': 1133213,
                            u'value': -10],
            u'source': u'comments': [],
                        u'externalLink': u'twittercoms',
                        u'id': u'2987515632',
                        u'language': None,
                        u'region': None,
                        u'tags': [],
                        u'title': None,
                        u'verified': None,
            u'sourceApplication': None,
            u'sourceFilterMatches': None,
            u'summaryContent': None,
            u'tags': [],
            u'title': None,
            u'topics': [1133213],
            u'workflowHistory': []],
 u'meta': u'totalCount': 251
None

我需要将 data['postDynamics'] 中的元素转换为 pandas 数据框。正如你所看到的,我不能只为每个标签做一个循环,它是对应的值,因为一些行项目有空列表。我希望能够按顺序将所有内容提取到熊猫数据框中。这就是我卡住的地方!

for data in Json['data']:
    print data['postDynamics']

Response:

[]
[]
[]
[u'value': u'2', u'label': u'View Count', u'value': u'0', u'label': u'Comment Count', u'value': u'0', u'label': u'Unique Commenters', u'value': u'0', u'label': u'Engagement', u'value': u'0', u'label': u'Likes and Votes', u'value': u'0', u'label': u'Inbound Links']
[]
[]
[]

理想情况下,我想将数据放入 pandas 数据框并写入如下所示的 csv 文件:

感谢任何人的帮助。

【问题讨论】:

请不要图片。我们如何复制数据以提供解决方案。请在投反对票之前发布文本版本。 对不起,我是这个平台的新手,让我现在修复它。 您能更改否决票吗?我插入了代码。 我不会投反对票。我通常不会投反对票 【参考方案1】:

使用 pandas 原生方法:

pd.read_json(Json)

【讨论】:

我得到这个错误:ValueError: Invalid file path or buffer object type: 这意味着您的数据类型尚未转换为 json。 pd.from_dict(Json) 是您的替代选择 我收到此错误:AttributeError: 'module' object has no attribute 'from_dict' 我确实按照上面的代码将其转换为 json 文件。 您的错误表明您没有导入熊猫。 import pandas as pd ***.com/questions/33559660/…

以上是关于将 Python JSON 文件转换为 Pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

将python Dataframe转换为Matlab文件

在 Panda 数据框中转换 json 字符串 [关闭]

Python - 将 csv 文件转换为 JSON

Python - 如何将 JSON 文件转换为数据框

如何将 Numpy 数组转换为 Panda DataFrame

无法使用 Python 将 JSON 文件转换为 CSV