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

如何用Python Pandas从非常规Excel表格提取指定任务行?

解决方案

问题分析

  1. 类型不匹配:原始JSON中的任务编号是字符串格式(如"130101"),但你定义的task_number列表用的是整数类型,isin()因类型不一致无法匹配到目标行。
  2. 表头位置错误:表格的实际表头在索引10的行(Unnamed:0值为Task的行),直接读取会把前面的标题行、空行混入数据,导致列名和数据对应混乱。

修正代码

import pandas as pd

# 原始JSON数据
excel_sheet_json = '''{"Unnamed: 0.1":0,"Unnamed: 0":"Some sentence titling the page","Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":1,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":2,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":3,"Unnamed: 0":"a thing:","Unnamed: 1":"sdftrhg","Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":9,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":10,"Unnamed: 0":"Task","Unnamed: 1":"Description","Unnamed: 2":"A","Unnamed: 3":"B","Unnamed: 4":"C","Unnamed: 5":null},{"Unnamed: 0.1":11,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":1,"Unnamed: 3":1,"Unnamed: 4":1,"Unnamed: 5":2.0},{"Unnamed: 0.1":12,"Unnamed: 0":"130","Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":13,"Unnamed: 0":"130101","Unnamed: 1":"something","Unnamed: 2":1,"Unnamed: 3":2,"Unnamed: 4":3,"Unnamed: 5":4.0},{"Unnamed: 0.1":14,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":15,"Unnamed: 0":null,"Unnamed: 1":"bam","Unnamed: 2":8,"Unnamed: 3":0,"Unnamed: 4":0,"Unnamed: 5":null},{"Unnamed: 0.1":16,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":17,"Unnamed: 0":"131","Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":18,"Unnamed: 0":"131269","Unnamed: 1":"something","Unnamed: 2":4,"Unnamed: 3":5,"Unnamed: 4":6,"Unnamed: 5":7.0},{"Unnamed: 0.1":43,"Unnamed: 0":null,"Unnamed: 1":null,"Unnamed: 2":null,"Unnamed: 3":null,"Unnamed: 4":null,"Unnamed: 5":null},{"Unnamed: 0.1":44,"Unnamed: 0":null,"Unnamed: 1":"bam","Unnamed: 2":8,"Unnamed: 3":0,"Unnamed: 4":0,"Unnamed: 5":null}'''

# 1. 直接将JSON转为DataFrame,无需存Excel再读取
df = pd.read_json(excel_sheet_json, lines=True)

# 2. 定位表头行(索引为10的行,Unnamed:0值为"Task")
header_row_idx = 10
new_header = df.iloc[header_row_idx].values
# 从表头下一行开始加载有效数据
df_clean = df.iloc[header_row_idx+1:].reset_index(drop=True)
# 设置新表头
df_clean.columns = new_header

# 3. 处理Task列:将字符串转为整数(无法转换的空值转为NaN)
df_clean['Task'] = pd.to_numeric(df_clean['Task'], errors='coerce')

# 4. 定义要筛选的任务编号
task_number = [130101, 131269]

# 5. 筛选符合条件的行,排除Task为空的无效行
filtered_df = df_clean[df_clean['Task'].isin(task_number)].dropna(subset=['Task'])

# 查看筛选结果
print(filtered_df)

# 可选:保存为新Excel文件
filtered_df.to_excel("filtered_tasks.xlsx", index=False)

关键说明

  • 跳过无效行:直接从表头行之后读取数据,避免前面的标题、空行干扰数据结构。
  • 类型统一:通过pd.to_numeric将Task列转为数值类型,与task_number的整数格式匹配,确保筛选生效。
  • 空值处理:errors='coerce'将无法转换的空值转为NaN,后续用dropna排除这些无效行,保证结果纯净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:34:58