从列表中的字典中提取值

时间:2020-12-29 20:24:25

标签: python python-3.x pandas dataframe

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

enter image description here

我尝试使用一些 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}

1 个答案:

答案 0 :(得分: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

相关问题