如何拆分Pandas列中的字典为新列和行(explode方法无效)
解决Pandas中非标准JSON/字典格式列的拆分问题
你的核心问题是Column C中的数据不符合标准JSON或Python字典格式:字典键未加引号,且存在0d-1这类非标准值格式,导致常规的json.loads和pandas.explode方法无法直接生效。以下是可行的解决方案:
步骤1:编写格式转换函数
先实现一个函数,将非标准的字典字符串转换为合法的Python对象:
import pandas as pd import re def fix_nonstandard_data(s): # 为无引号的字典键添加双引号 s = re.sub(r'(\w+):', r'"\1":', s) # 将非标准的sal_gp值(如0d-1)转为字符串格式,避免解析报错 s = re.sub(r'(\b0d-\d+\b)', r'"\1"', s) # 转换为Python列表对象 try: return eval(s) except Exception as e: print(f"转换失败: {e}") return []
步骤2:处理原始数据
将转换函数应用到Column C,再拆分行并展开字典列:
# 构造匹配你输入的示例数据 raw_data = { 'Column A': ['john', 'jack'], 'Column B': ['blue', 'gold'], 'Column C': [ '[{city: "Manhattan", job_type: "PERM", sal_gp: 0d-1, age: 3.4}, {city: "Dallas", job_type: "TEMP", sal_gp: 0d-1, age: 1.4}]', '[{city: "San Diego", job_type: "TEMP", sal_gp: 0d-1, age: 5.44}]' ] } df = pd.DataFrame(raw_data) # 转换非标准数据格式 df['Column C'] = df['Column C'].apply(fix_nonstandard_data) # 拆分列表为单独行 df_exploded = df.explode('Column C', ignore_index=True) # 将字典列展开为多列 df_final = pd.concat( [df_exploded.drop('Column C', axis=1), df_exploded['Column C'].apply(pd.Series)], axis=1 ) print(df_final)
输出结果
运行代码后将得到你期望的格式:
| Column A | Column B | city | job_type | sal_gp | age |
|---|---|---|---|---|---|
| john | blue | Manhattan | PERM | 0d-1 | 3.4 |
| john | blue | Dallas | TEMP | 0d-1 | 1.4 |
| jack | gold | San Diego | TEMP | 0d-1 | 5.44 |
注意事项
eval()函数存在安全风险,如果数据来自不可信来源,建议改用自定义解析器替代;- 若
0d-1需要转为数值类型,可在转换后额外添加类型转换逻辑。
内容的提问来源于stack exchange,提问作者rootuser3214
相关产品推荐
相关产品推荐

