xqqlyx

pandas读取excel

Pandas操作Excel

一、Pandas操作Excel的核心依赖

Pandas本身不直接实现Excel解析,需依赖第三方引擎处理不同格式:

  • .xlsx格式(Excel 2007+):依赖openpyxl
    安装:pip install pandas openpyxl
  • .xls格式(Excel 97-2003):依赖xlrd库(需指定版本,新版本已弃用.xls支持)
    安装:pip install pandas xlrd==1.2.0

二、Pandas读取Excel:关键参数与避坑

1. 基础读取代码

import pandas as pd

# 读取.xlsx文件(核心三要素:路径、工作表、引擎)
df = pd.read_excel(
    filepath_or_buffer="test_cases.xlsx",  # 文件路径(绝对/相对)
    sheet_name="login",                   # 工作表名或索引(如0表示第一个表)
    engine="openpyxl"                     # 显式指定引擎,避免格式识别错误
)

# 读取.xls文件
# df = pd.read_excel("old_data.xls", sheet_name=0, engine="xlrd")

2. 必知的核心参数

  • sheet_name:指定读取的工作表,支持名称(如"Sheet1")、索引(如0)或列表(读取多表);
  • usecols:仅读取指定列,如usecols=["用例ID", "接口地址"]
  • skiprows:跳过前N行(如跳过表头注释行);
  • dtype:指定列数据类型,如dtype={"用例ID": str}避免数字ID被解析为整数。

3. 常见坑与解决方案

  • 格式识别失败:报错Excel file format cannot be determined → 显式指定engine参数;
  • 文件损坏/格式不匹配:报错File is not a zip file → 检查文件后缀与实际格式是否一致(如不要把.xls改名为.xlsx);
  • 遍历数据出错:直接遍历DataFrame会输出列名 → 用iterrows()/itertuples()遍历行数据。

三、Pandas遍历Excel数据:正确姿势

DataFrame默认迭代列名,需用以下方法读取行数据:

1. iterrows():按行迭代(含索引)

# 遍历行数据(适合测试用例读取)
for idx, row in df.iterrows():
    case_id = row["用例ID"]
    url = row["接口地址"]
    params = eval(row["请求参数"])  # 解析JSON格式参数
    print(f"执行用例{case_id}:{url}")

2. itertuples():性能更优的迭代

# 更快的遍历方式(返回命名元组)
for row in df.itertuples():
    print(f"用例ID:{row.用例ID},预期结果:{row.预期结果}")

四、Pandas写入Excel:单表/多表/追加

1. 写入单个工作表

# 准备数据
data = {
    "用例ID": ["login_01", "login_02"],
    "接口地址": ["https://test.com/login", "https://test.com/user"],
    "测试结果": ["PASS", "FAIL"]
}
result_df = pd.DataFrame(data)

# 写入.xlsx文件(index=False避免多余行索引)
result_df.to_excel(
    "test_results.xlsx",
    sheet_name="登录模块",
    index=False,
    engine="openpyxl"
)

2. 写入多个工作表

# 用ExcelWriter实现多表写入
with pd.ExcelWriter("multi_sheet_data.xlsx", engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name="原始用例", index=False)
    result_df.to_excel(writer, sheet_name="测试结果", index=False)

3. 追加数据到已有Excel

# 追加模式(mode="a")
with pd.ExcelWriter("test_results.xlsx", mode="a", engine="openpyxl") as writer:
    new_df = pd.DataFrame({"用例ID": ["login_03"], "测试结果": ["PASS"]})
    new_df.to_excel(writer, sheet_name="新增用例", index=False)

posted on 2025-12-02 15:22  烫烫烫烫热  阅读(18)  评论(0)    收藏  举报