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

如何避免过多Pandas DataFrame转数组操作?优化数据对比逻辑

优化方案:直接操作DataFrame对比PDF与JSON数据元素

核心思路

放弃转数组的复杂逻辑,全程用Pandas原生方法完成数据加载、对比、筛选,代码更简洁高效。以下是完整优化流程:


1. 解析PDF附录到DataFrame

用pdfplumber提取PDF中的表格数据(纯文本场景可先提取文本再结构化),直接生成DataFrame:

import pdfplumber
import pandas as pd
import json

# 解析PDF表格到DataFrame
with pdfplumber.open("appendix.pdf") as pdf:
    # 目标表格页码根据实际调整,示例为第3页(索引从0开始)
    page = pdf.pages[2]
    pdf_table = page.extract_table()
    # 转换为DataFrame并指定列名(匹配PDF附录表头)
    pdf_df = pd.DataFrame(pdf_table[1:], columns=pdf_table[0])
    # 统一对比列的格式(去空格、转字符串,避免格式差异)
    pdf_df["element_code"] = pdf_df["element_code"].astype(str).str.strip()

2. 加载JSON数据并结构化

将JSON文件直接转为DataFrame,同步统一对比列格式:

# 加载JSON数据
with open("reference.json", "r", encoding="utf-8") as f:
    json_data = json.load(f)

# 转换为DataFrame(假设JSON是元素列表,含element_code字段)
json_df = pd.DataFrame(json_data)
json_df["element_code"] = json_df["element_code"].astype(str).str.strip()

3. 对比找出缺失元素

用Pandas的isin()方法直接筛选,无需手动转数组遍历:

# 筛选PDF中有但JSON缺失的元素
missing_in_json = pdf_df[~pdf_df["element_code"].isin(json_df["element_code"])]

# 筛选JSON中有但PDF缺失的元素(按需选择)
missing_in_pdf = json_df[~json_df["element_code"].isin(pdf_df["element_code"])]

# 合并结果并标记缺失位置(按需调整)
result_df = pd.concat(
    [missing_in_json, missing_in_pdf],
    keys=["missing_in_json", "missing_in_pdf"]
).reset_index(level=0).rename(columns={"level_0": "missing_location"})

4. 导出为新JSON文件

直接用Pandas内置方法导出,无需手动拼接JSON结构:

# 导出为格式化的JSON文件,orient参数控制输出格式
result_df.to_json(
    "missing_elements.json",
    orient="records",
    force_ascii=False,
    indent=2
)

关键优化点

  • 全程基于DataFrame操作,避免数组转译和循环对比,代码更简洁易维护
  • 用isin()替代手动遍历,时间复杂度更低,大数据量下效率提升明显
  • 统一对比列的格式,规避因空格、数据类型差异导致的对比错误
  • 复用Pandas内置的拼接、导出方法,减少重复造轮子

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:50:44