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

如何修复pandas DataFrame中错位的列单元格内容

解决pandas DataFrame列JSON内容错位问题的最优方案

核心思路

每个错位单元格存储的JSON数组的键唯一对应目标列名,无需额外的规则判断,只要逐行解析所有单元格的JSON内容,按实际的键映射到对应列即可完成内容归位。

实现步骤

  • 第一步:导入依赖,定义解析工具函数
import pandas as pd
import json

# 定义目标列名列表
TARGET_COLS = ['name', 'city', 'education', 'price', 'country']

def parse_cell(cell):
    """解析单元格内容,返回JSON对应的键和原始内容"""
    if pd.isna(cell) or not str(cell).strip():
        return None, None
    try:
        json_data = json.loads(cell)
        if not json_data:
            return None, None
        # 取数组第一个元素的键(同单元格所有元素的键一致)
        key = next(iter(json_data[0].keys()))
        return key, cell
    except:
        # 解析异常直接返回空
        return None, None
  • 第二步:逐行处理映射内容
def fix_row(row):
    # 初始化空的正确行结构
    fixed_row = {col: None for col in TARGET_COLS}
    # 遍历当前行所有单元格
    for cell in row:
        key, content = parse_cell(cell)
        if key in TARGET_COLS and fixed_row[key] is None:
            fixed_row[key] = content
    return pd.Series(fixed_row)

# 执行全表处理,得到修正后的DataFrame
df_fixed = df.apply(fix_row, axis=1)
  • 第三步:(可选)数据完整性校验
    如果需要避免内容丢失,可以加校验逻辑排查异常行:
# 对比原行和处理后行的非空值数量
original_count = df.notna().sum(axis=1)
fixed_count = df_fixed.notna().sum(axis=1)
# 输出匹配不一致的异常行
print("异常行数量:", len(df[original_count != fixed_count]))

方案优势

  • 准确率高:完全依赖JSON自带的键做归属匹配,不会出现误判
  • 兼容性强:支持任意错位场景,无论多少列错位都能正确还原
  • 易扩展:如果需要处理解析异常、重复键等特殊场景,直接修改parse_cell和fix_row函数即可。

内容的提问来源于stack exchange,提问作者Rostyslav Chayka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:06:06