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

Openpyxl与Pandas:Excel数据读取及统计查询方案推荐

高效实现方案推荐

一、核心工具选择

直接用Pandas处理,它在批量数据统计、分组计算上的效率远高于openpyxl,刚好你已了解该工具,无需额外学习新库。

二、完整实现步骤

1. 安装依赖(未安装时执行)

pip install pandas openpyxl

(Pandas读取xlsx文件需要openpyxl作为引擎,和你已掌握的工具兼容)

2. 读取Excel指定列数据

import pandas as pd

# 仅读取需要的两列,减少内存占用提升效率
df = pd.read_excel("你的文件路径.xlsx", usecols=["Thickness(mm)", "Weight(KG)"])
# 简化列名方便后续操作
df.columns = ["Thickness", "Weight"]

3. 分组统计生成目标结果表

# 按Thickness分组,计算总重量和包裹数量
grouped_data = df.groupby("Thickness").agg(
    Weight=("Weight", "sum"),
    Parcels=("Thickness", "count")
).reset_index()

# 将包裹数字段格式化为"X Parcels"样式
grouped_data["Parcels"] = grouped_data["Parcels"].apply(lambda x: f"{x} Parcels")

# 生成总计行
total_row = pd.DataFrame({
    "Thickness": ["TOTAL:"],
    "Weight": [df["Weight"].sum()],
    "Parcels": [f"{len(df)} Parcels"]
})

# 合并统计结果与总计行
final_result = pd.concat([grouped_data, total_row], ignore_index=True)

# 打印结果或保存到Excel
print(final_result.to_string(index=False))
# final_result.to_excel("统计结果.xlsx", index=False)

运行后即可得到你需要的示例格式输出。

4. 实现查询功能

单个Thickness值查询

def query_single_thickness(target_thick):
    result = grouped_data[grouped_data["Thickness"] == target_thick]
    if not result.empty:
        print(result.to_string(index=False))
    else:
        print(f"未找到厚度为{target_thick}的数据")

# 调用示例
query_single_thickness(0.12)

厚度范围查询

def query_thickness_range(min_thick, max_thick):
    filtered_data = grouped_data[(grouped_data["Thickness"] >= min_thick) & (grouped_data["Thickness"] <= max_thick)]
    if not filtered_data.empty:
        # 计算范围内的总计值
        range_total_weight = filtered_data["Weight"].sum()
        range_total_parcels = sum(int(item.split()[0]) for item in filtered_data["Parcels"])
        range_total_row = pd.DataFrame({
            "Thickness": ["RANGE TOTAL:"],
            "Weight": [range_total_weight],
            "Parcels": [f"{range_total_parcels} Parcels"]
        })
        range_result = pd.concat([filtered_data, range_total_row], ignore_index=True)
        print(range_result.to_string(index=False))
    else:
        print(f"未找到厚度在{min_thick}-{max_thick}之间的数据")

# 调用示例
query_thickness_range(0.12, 0.14)

5. 交互式查询(可选)

如果需要让用户手动输入查询条件:

while True:
    print("\n查询选项:")
    print("1. 单个厚度值查询")
    print("2. 厚度范围查询")
    print("3. 退出")
    choice = input("输入选项编号:")
    
    if choice == "1":
        target = float(input("输入要查询的厚度值:"))
        query_single_thickness(target)
    elif choice == "2":
        min_t = float(input("输入最小厚度:"))
        max_t = float(input("输入最大厚度:"))
        query_thickness_range(min_t, max_t)
    elif choice == "3":
        print("程序退出")
        break
    else:
        print("无效选项,请重新输入")

三、方案优势

  • 高效:Pandas的分组聚合基于底层优化,比openpyxl逐行处理快数十倍,数据量越大优势越明显
  • 简洁:核心统计逻辑仅需几行代码,可读性强
  • 扩展性好:后续如需添加平均值等其他统计维度,直接修改agg方法的参数即可

内容的提问来源于stack exchange,提问作者Code-Killer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:15:45