【问题标题】:Python JSON to Pandas DataframePython JSON 到 Pandas 数据框
【发布时间】:2017-05-14 07:23:30
【问题描述】:

我正在处理一个 JSON 响应,其格式类似于下面的多嵌套字典:

{u'addresses': [],
 u'application_ids': [20855193],
 u'applications': [{u'answers': [{u'answer': u'Indeed ',
                                  u'question': u'How did you hear?'}],
                    u'applied_at': u'2015-10-29T22:19:04.925Z',
                    u'candidate_id': 9999999,
                    u'credited_to': None,
                    u'current_stage': {u'id': 9999999,
                                       u'name': u'Application Review'},
                    u'id': 9999999,
                    u'jobs': [{u'id': 9999999,u'name': u'ENGINEER'}],
                    u'last_activity_at': u'2015-10-29T22:19:04.767Z',
                    u'prospect': False,
                    u'rejected_at': None,
                    u'rejection_details': None,
                    u'rejection_reason': None,
                    u'source': {u'id': 7, u'public_name': u'Indeed'},
                    u'status': u'active'}],
 u'attachments': [{u'filename': u'Jason_Bourne.pdf',
                   u'type': u'resume',
                   u'url': u'https://resumeURL'}],
 u'company': None,
 u'coordinator': {u'employee_id': None,
                  u'id': 9999999,
                  u'name': u'Batman_Robin'},
 u'email_addresses': [{u'type': u'personal',
                       u'value': u'jasonbourne@gmail.com'}],
 u'first_name': u'Jason',
 u'id': 9999999,
 u'last_activity': u'2015-10-29T22:19:04.767Z',
 u'last_name': u'Bourne',
 u'website_addresses': []}

我正在尝试将 JSON 扁平化为表格,并在 pandas 文档中找到以下示例:

http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.io.json.json_normalize.html

由于某种原因,“应用程序”标题下的任何数据都以每行一个字符的形式返回。例如,如果我调用:

timeapplied = json_normalize(data,['applications', ['applied_at']])

我明白了:

 0
0   2
1   0
2   1
3   5
4   -
5   1
6   0
7   -
8   2
9   9
10  T
11  2
12  2
13  :
14  1
15  9
16  :
17  0
18  4
19  .
20  9
21  2
22  5
23  Z

有什么办法可以让我使用 normalize 函数吗?

谢谢!

【问题讨论】:

  • 你想要的输出是什么?

标签: python json pandas


【解决方案1】:

您的电话:

timeapplied = json_normalize(data,['applications', ['applied_at']])

对 json_normalize 的调用由如下所示的参数组成,

pandas.io.json.json_normalize(data, record_path=None, meta=None, meta_prefix=None, record_prefix=None)

您将 ['applications', ['applied_at']] 作为 record_path 传递。显然,这意味着data['applications]['applied_at'] 下提供的数据被用作记录数组。在这种情况下,字符串用作字符列表。因此,您可以获得与每个字符对应的行。

要简单地将“应用程序”标题下的所有数据作为数据框获取,请使用:

applied = json_normalize(data, 'applications')

要获得applied_at 作为单独的列,请使用:

applied_at = applied.applied_at

applied_at = applied['applied_at']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2021-10-04
    • 2017-06-27
    • 2023-03-13
    • 2021-09-20
    相关资源
    最近更新 更多