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

如何基于列值移除行内重复列(含例外规则适配大型JSON)

高效移除大型JSON中重复值列(排除二进制列)

针对你需要处理大型扁平化JSON、移除非二进制列中全行值重复的重名列的需求,咱们用向量化操作替代低效循环,保证处理效率。下面是具体的实现方案:

核心思路

  1. 先区分二进制列(仅含2种值,如布尔值、0/1)和非二进制列,二进制列即使值重复也保留;
  2. 对非二进制列,通过列哈希快速识别全行值完全重复的列组(哈希值相同则列值完全一致);
  3. 每组重复列只保留一个,最后合并二进制列得到结果。

Python 实现代码

import pandas as pd
import hashlib

def hash_column(col):
    # 生成列的唯一哈希值,用于快速判断列值是否完全重复
    # 先转字符串统一类型,再转字节流计算MD5哈希
    return hashlib.md5(col.astype(str).values.tobytes()).hexdigest()

# 1. 读取大型扁平化JSON文件
# 如果是每行一个JSON对象,加上lines=True;否则去掉
df = pd.read_json("your_large_data.json", lines=True)

# 2. 识别二进制列(唯一值数量≤2的列)
binary_cols = []
non_binary_cols = []
for col in df.columns:
    unique_count = df[col].nunique()
    if unique_count <= 2:
        binary_cols.append(col)
    else:
        non_binary_cols.append(col)

# 3. 计算非二进制列的哈希值,分组重复列
col_hash_map = {col: hash_column(df[col]) for col in non_binary_cols}
hash_groups = {}
for col, h in col_hash_map.items():
    hash_groups.setdefault(h, []).append(col)

# 4. 每组重复列仅保留第一个
keep_non_binary = [group[0] for group in hash_groups.values()]

# 5. 合并保留列,生成清洗后的数据
final_columns = keep_non_binary + binary_cols
df_cleaned = df[final_columns]

# 6. 保存清洗后的JSON(可选,按原格式保存)
df_cleaned.to_json("cleaned_data.json", orient="records", lines=True)

关键细节说明

  • 高效性:所有列操作都是Pandas向量化执行,哈希计算基于整列字节流,完全避免逐行循环,处理大型数据集速度极快;
  • 类型兼容:把列转成字符串后再哈希,能兼容不同数据类型但值相同的列(比如int类型的35和字符串类型的"35"),如果不需要这个兼容,可以去掉astype(str);
  • 二进制列判断:通过nunique() <=2识别,覆盖布尔列、0/1列等场景,符合你的排除需求;
  • 测试验证:用你给出的示例数据测试,会自动保留Name, Age, Job(非二进制去重后)和Happy, Married?(二进制列),完全匹配期望输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:23:13