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

Python Pandas新手求助:从数据库JSON列提取数据构建拆分列DataFrame

解决从JSON列拆分数据到DataFrame的问题

嘿,作为Pandas新手遇到这种嵌套JSON的拆分需求很正常,我来一步步帮你把Profile列里的JSON数据拆成独立的DataFrame列,包括Role里的子项~

整体思路

我们会先把数据库里的Employees表读进Pandas DataFrame,然后把Profile列的JSON字符串解析成Python字典,最后用json_normalize把嵌套的字典展开成单独的列。

步骤1:导入所需库并读取数据库数据

首先得导入必要的库,然后连接你的数据库(这里以SQLAlchemy为例,你可以换成自己用的数据库连接方式,比如pymysql配合read_sql):

import pandas as pd
import json
from sqlalchemy import create_engine

# 替换成你的数据库连接字符串,比如MySQL、PostgreSQL等格式
engine = create_engine('your_database_connection_string')

# 读取Employees表到DataFrame
df = pd.read_sql('SELECT * FROM Employees', engine)

步骤2:解析Profile列的JSON字符串

Profile列现在是字符串格式,我们需要把它转成Python字典,方便后续展开:

# 处理可能的无效JSON(比如空字符串、格式错误),避免代码报错
def parse_json(json_str):
    try:
        return json.loads(json_str)
    except (json.JSONDecodeError, TypeError):
        # 解析失败时返回空字典,保证后续流程正常
        return {}

# 把解析函数应用到Profile列
df['Profile'] = df['Profile'].apply(parse_json)

步骤3:展开JSON数据为独立列

用pd.json_normalize把Profile列的字典(包括嵌套的Role字典)展开成单独的列,再和原DataFrame合并:

# 展开Profile列的JSON数据,嵌套的Role会自动生成带前缀的列
profile_df = pd.json_normalize(df['Profile'])

# 合并原表(去掉Profile列)和展开后的JSON列
final_df = pd.concat([df.drop('Profile', axis=1), profile_df], axis=1)

# 自定义列名,把默认的"Role.Support"改成你想要的"Role(Support)"格式
final_df = final_df.rename(columns={
    'Role.Support': 'Role(Support)',
    'Role.Troubleshoot': 'Role(Troubleshoot)',
    'Role.Update KBarticles': 'Role(Update KBarticles)'
})

最终效果

运行完上面的代码后,final_df就会包含你想要的所有独立列:EmpID、Department、Role(Support)、Role(Troubleshoot)、Role(Update KBarticles)、Team_name、Date_Joined,同时保留原Employees表的其他列~

小提示

如果你的Profile列里有部分JSON格式不一致,parse_json函数里的try-except会帮你跳过错误,返回空字典,避免整个代码崩溃。你可以根据实际情况调整这个函数的处理逻辑哦。

内容的提问来源于stack exchange,提问作者Taukheer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:47:27