如何访问DataFrame中嵌套字典数据并处理缺失值
提取嵌套JSON字段并构建目标DataFrame
给定如下Pandas DataFrame:
import pandas as pd import numpy as np data = { 'Col1': [1, 2, 3], 'Person': [ {'ID': 10001, 'Data': {'Address': {'Street': '1234 Street A', 'City': 'Houston', 'State': 'Texas', 'Zip': '77002'}}, 'Age': 30, 'Income': 50000}, {'ID': 10002, 'Data': {'Address': {'Street': '7892 Street A', 'City': 'Greenville', 'State': 'Maine', 'Zip': np.nan}}, 'Age': np.nan, 'Income': 63000}, {'ID': 10003, 'Data': {'Address': np.nan}, 'Age': 56, 'Income': 85000} ] } df = pd.DataFrame(data)
需求是从Person字段中提取Income、Age、Street、Zip,结合Col1构建结构为df[['Col1', 'Income', 'Age', 'Street', 'Zip']]的DataFrame,保留原始缺失值。
实现方法
利用pd.json_normalize展开嵌套JSON字段,再与原DataFrame的Col1合并,最后筛选并调整列名即可:
# 展开Person字段的嵌套数据,指定层级分隔符 person_normalized = pd.json_normalize(df['Person'], sep='_') # 合并Col1与展开后的目标字段 result = pd.concat([df['Col1'], person_normalized[['Income', 'Age', 'Data_Address_Street', 'Data_Address_Zip']]], axis=1) # 重命名列名匹配需求 result = result.rename(columns={ 'Data_Address_Street': 'Street', 'Data_Address_Zip': 'Zip' }) # 重置索引(可选,保证索引连续) result = result.reset_index(drop=True) print(result)
输出结果
Col1 Income Age Street Zip 0 1 50000 30.0 1234 Street A 77002 1 2 63000 NaN 7892 Street A NaN 2 3 85000 56.0 NaN NaN
说明
pd.json_normalize会自动识别嵌套JSON结构,通过sep参数定义层级分隔符,避免列名混乱;- 对于缺失的嵌套字段(如第三行的
Address为NaN),工具会自动填充NaN,无需额外处理缺失值; - 最终通过列名重命名,完全匹配需求的DataFrame结构。
内容的提问来源于stack exchange,提问作者Scott Boston
相关产品推荐
相关产品推荐

