我正在处理一些嵌套的 NoSQL 数据。我想使用
json_normalize
取消嵌套它,但保留“id transação”列,以便我可以将生成的数据帧合并到其他数据帧中。
import pandas as pd
import json
data = {
"id de transação": [1, 2, 3, 4, 5],
"nome": ["Alice", "Bob", "Charlie", "David", "Eve"],
"dados": [
{"data": "2024-01-01", "local": "São Paulo", "valor": 100.50},
{"data": "2024-01-02", "local": "Rio de Janeiro", "valor": 200.75},
{"data": "2024-01-03", "local": "Belo Horizonte", "valor": 300.00},
{"data": "2024-01-04", "local": "Curitiba", "valor": 400.25},
{"data": "2024-01-05", "local": "Porto Alegre", "valor": 500.50}
]
}
df = pd.DataFrame(data)
我尝试使用
meta
参数但没有成功。
df_dados_normalized = pd.json_normalize(data = data["dados"], record_path=None, meta=data["id de transação"])
有办法吗?我希望得到的数据框带有“id de transação”。
meta
不接受 Series 输入,它接受一个键列表,这些键将构成在传递带有 record_path 的嵌套对象时要保留的数据。
join
的输出 json_normalize
保留到列中。确保 set_axis
与 df
相同,因为 json_normalize
将创建一个新的:
out = (df[['id de transação', 'nome']]
.join(pd.json_normalize(data=df['dados'], record_path=None)
.set_axis(df.index)
)
)
输出:
id de transação nome data local valor
0 1 Alice 2024-01-01 São Paulo 100.50
1 2 Bob 2024-01-02 Rio de Janeiro 200.75
2 3 Charlie 2024-01-03 Belo Horizonte 300.00
3 4 David 2024-01-04 Curitiba 400.25
4 5 Eve 2024-01-05 Porto Alegre 500.50
为了让您了解
meta
的有效使用,您需要以这种方式组织数据:
data = [
{
'id de transação': 1,
'nome': 'Alice',
'dados': [
{'data': '2024-01-01', 'local': 'São Paulo', 'valor': 100.50},
],
},
{
'id de transação': 2,
'nome': 'Bob',
'dados': [
{'data': '2024-01-02', 'local': 'Rio de Janeiro', 'valor': 200.75},
{'data': '2024-01-03', 'local': 'Belo Horizonte', 'valor': 300.00},
],
},
]
out = pd.json_normalize(data=data, record_path=['dados'],
meta=['id de transação', 'nome'])
输出:
data local valor id de transação nome
0 2024-01-01 São Paulo 100.50 1 Alice
1 2024-01-02 Rio de Janeiro 200.75 2 Bob
2 2024-01-03 Belo Horizonte 300.00 2 Bob