如何拆分DataFrame的键值对字符串列并以键作为列名?
解决方案:将JSON格式字符串列转换为结构化DataFrame
你的列内容是标准JSON格式字符串,手动用逗号拆分的方式不仅麻烦,还容易在复杂场景下出错(比如值中包含逗号/冒号的情况),推荐用以下两种可靠方法实现需求:
方法1:使用pd.json_normalize(推荐)
这是Pandas专门处理JSON格式数据的工具,直接解析字符串并展开为结构化表格:
import pandas as pd import json # 假设你的原始DataFrame名为data,目标列是'demographic' # 先将每个JSON字符串转为Python字典 data['demographic'] = data['demographic'].apply(json.loads) # 展开为结构化DataFrame result = pd.json_normalize(data['demographic'])
如果数据来源可信,也可以用eval简化(但注意不可信数据别用,有安全风险):
result = pd.json_normalize(data['demographic'].apply(eval))
执行后result就是你需要的结构化表格:
| ID | Name | Age |
|---|---|---|
| AP001 | Anderson | 23 |
| AP002 | Jasmine | 36 |
| AP003 | Zack | 28 |
| AP004 | Chole | 39 |
方法2:基于字符串拆分的手动解析(不推荐,仅作参考)
如果一定要延续你之前的拆分思路,可以手动处理每一行的字符串,但要注意清理引号和大括号:
import pandas as pd def parse_demographic(row): # 去掉首尾的大括号 clean_row = row.strip('{}') # 按逗号拆分键值对 kv_pairs = clean_row.split(',') # 遍历拆分键和值,清理引号 parsed_dict = {} for pair in kv_pairs: key, value = pair.split(':') parsed_dict[key.strip('"')] = value.strip('"') return pd.Series(parsed_dict) result = data['demographic'].apply(parse_demographic)
⚠️ 注意:这个方法仅适用于示例中的简单场景,如果值中包含逗号、冒号或引号,会直接解析失败,因此优先用方法1。
内容的提问来源于stack exchange,提问作者sssxxxyyy
相关产品推荐
相关产品推荐

