如何将Pandas DataFrame中等号分隔的字典列表解析为单独字段
解析Pandas DataFrame中特殊格式列的方法
你的数据格式类似JSON但用等号替代冒号,无法直接用json.load()或yaml.load()解析,下面是针对这种格式的分步解决方案:
1. 编写解析函数
先定义一个函数,把单元格内的特殊格式字符串转换成标准字典列表:
import re import json import pandas as pd def parse_special_format(s): # 移除首尾的中括号 cleaned_str = s.strip('[]') # 分割每个独立的对象 item_list = cleaned_str.split('}, {') parsed_objects = [] for item in item_list: # 补全对象的首尾大括号 formatted_item = '{' + item.strip('{}') + '}' # 将布尔值的等号替换为冒号(保持小写,符合JSON规范) formatted_item = re.sub(r'(\w+)=true', r'\1:true', formatted_item) formatted_item = re.sub(r'(\w+)=false', r'\1:false', formatted_item) # 将字符串类型的键值对替换为带引号的JSON格式 formatted_item = re.sub(r'(\w+)=([\w\/\s]+)', r'\1:"\2"', formatted_item) # 解析为字典并加入结果列表 try: parsed_obj = json.loads(formatted_item) parsed_objects.append(parsed_obj) except Exception as e: print(f"解析失败: {e}") parsed_objects.append(None) return parsed_objects
2. 应用函数并展开记录
假设你的DataFrame名为df,目标列名为target_column,执行以下步骤:
# 对目标列应用解析函数,得到字典列表 df['parsed_data'] = df['target_column'].apply(parse_special_format) # 将字典列表展开为单独行 df_exploded = df.explode('parsed_data').reset_index(drop=True) # 将字典拆分为单独的列 df_final = pd.concat([ df_exploded.drop('parsed_data', axis=1), df_exploded['parsed_data'].apply(pd.Series) ], axis=1)
执行后,df_final就是每个原始对象对应一行的DataFrame,包含self、disabled、id、value等独立列。
说明
- 正则表达式会自动处理布尔值(
true/false)和字符串值(包含字母、数字、空格、斜杠的内容) - 如果你的数据中有更复杂的值(比如包含逗号),可以调整正则表达式适配
内容的提问来源于stack exchange,提问作者Adi Kalluru
相关产品推荐
相关产品推荐

