如何拆分DataFrame中的JSONB列,生成Field、Value、Timestamp列?
拆分DataFrame中JSONB类型列的解决方案
方法一:Pandas处理(数据已加载到DataFrame)
如果已经将数据从数据库读取到Pandas DataFrame中,可以通过以下步骤拆分Fields列:
解析JSON字符串为字典
先把Fields列的JSON字符串转换为Python字典:import pandas as pd import json # 假设df是读取后的DataFrame df['Fields'] = df['Fields'].apply(json.loads)拆分字典为多行并提取字段
通过遍历每行的字典,生成新的行数据,再构建目标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
相关产品推荐
相关产品推荐

