zoukankan      html  css  js  c++  java
  • Python自动化测试使用Pandas来高效处理测试数据

    一、思考

    1.Pandas是什么?

    • 功能极其强大的数据分析库
    • 可以高效地操作各种数据集
      • csv格式的文件
      • Excel文件
      • HTML文件
      • XML格式的文件
      • JSON格式的文件
      • 数据库操作

    2.经典面试题

    通过面试题引出主题,读者可以思考,如果你遇到这题,该如何解答呢?



    二、使用pandas来操作Excel文件

    1.安装

    a.通过Pypi来安装

    pip install pandas
    

    b.通过源码来安装

    git clone git://github.com/pydata/pandas.git
    cd pandas
    python setup.py install
    

    2.按列读取数据

    案例中的lemon_cases.xlsx文件内容如下所示:


    import pandas as pd
    
    # 读excel文件
    # 返回一个DataFrame对象,多维数据结构
    df = pd.read_excel('lemon_cases.xlsx', sheet_name='multiply')
    print(df)
    
    
    # 1.读取一列数据
    # df["title"] 返回一个Series对象,记录title这列的数据
    print(df["title"])
    
    # Series对象能转化为任何序列类型和dict字典类型
    print(list(df['title']))    # 转化为列表
    # title为DataFrame对象的属性
    print(list(df.title))    # 转化为列表
    print(tuple(df['title']))   # 转化为元组
    print(dict(df['title']))    # 转化为字典,key为数字索引
    
    # 2.读取某一个单元格数据
    # 不包括表头,指定列名和行索引
    print(df['title'][0])   # title列,不包括表头的第一个单元格
    
    # 3.读取多列数据
    print(df[["title", "actual"]])
    
    

    3.按行读取数据

    import pandas as pd
    
    # 读excel文件
    df = pd.read_excel('lemon_cases.xlsx', sheet_name='multiply')   # 返回一个DataFrame对象,多维数据结构
    print(df)
    
    
    # 1.读取一行数据
    # 不包括表头,第一个索引值为0
    # 获取第一行数据,可以将其转化为list、tuple、dict
    print(list(df.iloc[0]))  # 转成列表
    print(tuple(df.iloc[0]))  # 转成元组
    print(dict(df.iloc[0]))  # 转成字典
    print(dict(df.iloc[-1]))  # 也支持负索引
    
    # 2.读取某一个单元格数据
    # 不包括表头,指定行索引和列索引(或者列名)
    print(df.iloc[0]["l_data"])   # 指定行索引和列名
    print(df.iloc[0][2])    # 指定行索引和列索引
    
    # 3.读取多行数据
    print(df.iloc[0:3])
    
    

    4.iloc和loc方法

    import pandas as pd
    
    # 读excel文件
    df = pd.read_excel('lemon_cases.xlsx', sheet_name='multiply')   # 返回一个DataFrame对象,多维数据结构
    print(df)
    
    
    # 1.iloc方法
    # iloc使用数字索引来读取行和列
    # 也可以使用iloc方法读取某一列
    print(df.iloc[:, 0])
    print(df.iloc[:, 1])
    print(df.iloc[:, -1])
    
    # 读取多列
    print(df.iloc[:, 0:3])
    
    # 读取多行多列
    print(df.iloc[2:4, 1:4])
    print(df.iloc[[1, 3], [2, 4]])
    
    # 2.loc方法
    # loc方法,基于标签名或者索引名来选择
    print(df.loc[1:2, "title"])  			# 多行一列
    print(df.loc[1:2, "title":"r_data"])    # 多列多行
    
    # 基于布尔类型来选择
    print(df["r_data"] > 5)  # 某一列中大于5的数值为True,否则为False
    print(df.loc[df["r_data"] > 5])  # 把r_data列中大于5,所在的行选择出来
    print(df.loc[df["r_data"] > 5, "r_data":"actual"])  # 把r_data到actual列选择出来
    
    

    5.读取所有数据

    import pandas as pd
    
    # 读excel文件
    df = pd.read_excel('lemon_cases.xlsx', sheet_name='multiply')   # 返回一个DataFrame对象,多维数据结构
    print(df)
    
    
    # 读取的数据为嵌套列表的列表类型,此方法不推荐使用
    print(df.values)
    
    # 嵌套字典的列表
    datas_list = []
    for r_index in df.index:
        datas_list.append(df.iloc[r_index].to_dict())
    
    print(datas_list)
    
    

    6.写入数据

    import pandas as pd
    
    # 读excel文件
    df = pd.read_excel('lemon_cases.xlsx', sheet_name='multiply')   # 返回一个DataFrame对象,多维数据结构
    print(df)
    
    
    df['result'][0] = 1000
    print(df)
    with pd.ExcelWriter('lemon_cases_new.xlsx') as writer:
        df.to_excel(writer, sheet_name="New", index=False)
    
    



    三、使用pandas来操作csv文件

    1.读取csv文件

    案例中的data.log文件内容如下所示:

    TestID,TestTime,Success
    0,149,0
    1,69,0
    2,45,0
    3,18,1
    4,18,1
    

    import pandas as pd
    
    
    # 读取csv文件
    # 方法一,使用read_csv读取,列与列之间默认以逗号分隔(推荐方法)
    # a.第一行为列名信息
    csvframe = pd.read_csv('data.log')
    
    # b.第一行没有列名信息,直接为数据
    csvframe = pd.read_csv('data.log', header=None)
    
    # c.第一行没有列名信息,直接为数据,也可以指定列名
    csvframe = pd.read_csv('data.log', header=None, names=["Col1", "Col2", "Col3"])
    
    
    # 方法二,read_table,需要指定列与列之间分隔符为逗号
    csvframe = pd.read_table('data.log', sep=",")
    
    

    2.解答面试题

    import pandas as pd
    
    
    # 1.读取csv文件
    csvframe = pd.read_csv('data.log')
    
    # 2.选择Success为0的行
    new_csvframe = csvframe.loc[csvframe["Success"] == 0]
    result_csvframe = new_csvframe["TestTime"]
    avg_result = round(sum(result_csvframe)/len(result_csvframe), 2)
    print("TestTime最小值为:{}\nTestTime最大值为:{}\nTestTime平均值为:{}".
          format(min(result_csvframe), max(result_csvframe), avg_result))
    
    

    四、总结

    • 在数据分析、数据可视化领域,Pandas的应用极其广泛;在大规模数据、多种类数据处理上效率非常高
    • 在软件测试领域也有应用,但如果仅仅用excel来存放测试数据,使用Pandas就有点“杀鸡焉用宰牛刀”的感觉,那么建议使用特定的模块来处理(比如openpyxl
    *******请大家尊重原创,如要转载,请注明出处: 转载自:https://www.cnblogs.com/keyou1/,谢谢!!*******
    *******有任何疑问,欢迎加入软件测试交流群:699968364(加群时,请备注:博客园-可优)。博主QQ:3429173264*******
  • 相关阅读:
    Running APP 使用说明
    Android 控件八 WebView 控件
    Android 控件七 ImageView 控件
    Android 控件六 CheckBox 控件
    Android 控件五 RadioButton 控件
    Android 控件四 EditText 控件
    Android 控件三 TextView 控件实现 Button
    Android 控件二 Button
    Android 基础控件演示实例
    Android 控件一 TextView
  • 原文地址:https://www.cnblogs.com/keyou1/p/10948796.html
Copyright © 2011-2022 走看看