You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:01:07