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

如何拆分DataFrame中的JSONB列,生成Field、Value、Timestamp列?

拆分DataFrame中JSONB类型列的解决方案

方法一:Pandas处理(数据已加载到DataFrame)

如果已经将数据从数据库读取到Pandas DataFrame中,可以通过以下步骤拆分Fields列:

  1. 解析JSON字符串为字典
    先把Fields列的JSON字符串转换为Python字典:

    import pandas as pd
    import json
    
    # 假设df是读取后的DataFrame
    df['Fields'] = df['Fields'].apply(json.loads)
    
  2. 拆分字典为多行并提取字段
    通过遍历每行的字典,生成新的行数据,再构建目标DataFrame:

    new_data = []
    for _, row in df.iterrows():
        record_id = row['Id']
        for field_key, field_info in row['Fields'].items():
            new_data.append({
                'Id': record_id,
                'Field': field_key,
                'Value': field_info['Value'],
                'Timestamp': field_info['Timestamp']
            })
    result_df = pd.DataFrame(new_data)
    

    或者用更简洁的Pandas链式操作:

    result_df = (
        df.assign(Fields=df['Fields'].apply(lambda x: pd.Series(x)))
        .melt(id_vars='Id', var_name='Field', value_name='details')
        .assign(
            Value=lambda x: x['details'].str['Value'],
            Timestamp=lambda x: x['details'].str['Timestamp']
        )
        .drop('details', axis=1)
    )
    

方法二:数据库直接查询(以PostgreSQL为例)

如果数据还在数据库中,可直接用SQL拆分JSONB列,避免在Python中处理:

SELECT
    id,
    key AS "Field",
    (value ->> 'Value') AS "Value",
    (value ->> 'Timestamp') AS "Timestamp"
FROM
    your_table_name,
    jsonb_each(fields);

jsonb_each函数会将JSONB类型的fields列拆分为多行键值对,再通过->>运算符提取嵌套字段的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:22:38