【问题标题】:Extract values from dicts inside lists从列表中的字典中提取值
【发布时间】:2021-04-06 10:42:13
【问题描述】:

我正在尝试从这个 JSON 文件中提取值,但是我在从 dict 值的列表中提取数据时遇到了一些麻烦。例如,在citystate 中,我想只获取name 的值并创建一个Pandas Dataframe 并只选择一些这样的键。

我尝试使用一些 forget 方法技术,但没有成功。

{'birthday': ['1987-07-13T00:00:00.000Z'],
 'cpf': ['9999999999999'],
 'rg': [],
 'gender': ['Feminino'],
 'email': ['my_user@bol.com.br'],
 'phone_numbers': ['51999999999'],
 'photo': [],
 'id': 11111111,
 'duplicate_id': -1,
 'name': 'My User',
 'cnpj': [],
 'company_name': '[]',
 'city': [{'id': 0001, 'name': 'Porto Alegre'}],
 'state': [{'id': 100, 'name': 'Rio Grande do Sul', 'fs': 'RS'}],
 'type': 'Private Person',
 'tags': [],
 'pending_tickets_count': 0}

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)应包括所需的行为、特定问题或错误所需的最短代码作为格式化文本在问题本身中重现。没有明确的问题陈述的问题对其他读者没有用处。请参阅:minimal reproducible example。请不要发布文字图片。

标签: python python-3.x pandas dataframe


【解决方案1】:
In [123]: data
Out[123]:
{'birthday': ['1987-07-13T00:00:00.000Z'],
 'cpf': ['9999999999999'],
 'rg': [],
 'gender': ['Feminino'],
 'email': ['my_user@bol.com.br'],
 'phone_numbers': ['51999999999'],
 'photo': [],
 'id': 11111111,
 'duplicate_id': -1,
 'name': 'My User',
 'cnpj': [],
 'company_name': '[]',
 'city': [{'id': '0001', 'name': 'Porto Alegre'}],
 'state': [{'id': 100, 'name': 'Rio Grande do Sul', 'fs': 'RS'}],
 'type': 'Private Person',
 'tags': [],
 'pending_tickets_count': 0}

In [124]: data2 = {k:v for k,v in data.items() if k in required}

In [125]: data2
Out[125]:
{'birthday': ['1987-07-13T00:00:00.000Z'],
 'gender': ['Feminino'],
 'id': 11111111,
 'name': 'My User',
 'city': [{'id': '0001', 'name': 'Porto Alegre'}],
 'state': [{'id': 100, 'name': 'Rio Grande do Sul', 'fs': 'RS'}]}

In [126]: pd.DataFrame(data2).assign(
     ...:     city_name=lambda x: x['city'].str.get('name'),
     ...:     state_name=lambda x: x['state'].str.get('name'),
     ...:     state_fs=lambda x: x['state'].str.get('fs')
     ...:     ).drop(['state', 'city'], axis=1)
Out[126]:
                   birthday    gender        id     name     city_name         state_name state_fs
0  1987-07-13T00:00:00.000Z  Feminino  11111111  My User  Porto Alegre  Rio Grande do Sul       RS

需要data2 的原因是您不能拥有长度不同的列。所以在这种情况下,pd.DataFrame(data) 将不起作用,因为 rg 有 0 个项目,但 birthday 有 1 个项目。

如果您直接处理 json 文件,还需要查看 pd.json_normalize

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2021-09-26
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多