2 数据规整
2.1层次化索引
def data_index(): data = pd.Series(np.random.rand(6), index=[ ['江苏','江苏','浙江','浙江','广东','广东'], ['南京','苏州','杭州','宁波','广州','深圳'] ]) print("data is:\n",data) print("data index is:\n",data.index) print("data['江苏']:\n",data['江苏']) print("data.loc[:,'深圳']:\n",data.loc[:,'深圳']) print("data.unstack()\n",data.unstack()) print("data.unstack().stack()\n",data.unstack().stack())
输出:
data is: 江苏 南京 79.0 苏州 7.0 浙江 杭州 21.0 宁波 14.0 广东 广州 40.0 深圳 30.0 dtype: float64 data index is: MultiIndex([('江苏', '南京'), ('江苏', '苏州'), ('浙江', '杭州'), ('浙江', '宁波'), ('广东', '广州'), ('广东', '深圳')], ) data['江苏']: 南京 79.0 苏州 7.0 dtype: float64 data.loc[:,'深圳']: 广东 30.0 dtype: float64 data.unstack() 南京 宁波 广州 杭州 深圳 苏州 广东 NaN NaN 40.0 NaN 30.0 NaN 江苏 79.0 NaN NaN NaN NaN 7.0 浙江 NaN 14.0 NaN 21.0 NaN NaN data.unstack().stack() 广东 广州 40.0 深圳 30.0 江苏 南京 79.0 苏州 7.0 浙江 宁波 14.0 杭州 21.0 dtype: float64
2.2 合并数据集
#2.2.1按指定列合并 def merge_data(): df1 = pd.DataFrame({'id':[1,2,3,4],'val':['Jerry','Tom','Kerry','Jessca']}) df2 = pd.DataFrame({'id':[1,2,3,4,5],'val':['Kerry','Peter','Jerry','Tom','Jessca']}) print("df1 is:\n",df1) print("df2 is:\n",df2) print("merage:\n",pd.merge(df1,df2,on='id')) df1 = pd.DataFrame({'id1':[1,2,3,4],'val':['Jerry','Tom','Kerry','Jessca']}) df2 = pd.DataFrame({'id2':[1,2,3,4,5],'val':['Kerry','Peter','Jerry','Tom','Jessca']}) print("merage:\n",pd.merge(df1,df2,left_on='id1',right_on='id2')) print("merage:\n",pd.merge(df1,df2,left_on='id1',right_on='id2',how='outer'))
输出:
df1 is: id val 0 1 Jerry 1 2 Tom 2 3 Kerry 3 4 Jessca df2 is: id val 0 1 Kerry 1 2 Peter 2 3 Jerry 3 4 Tom 4 5 Jessca merage: id val_x val_y 0 1 Jerry Kerry 1 2 Tom Peter 2 3 Kerry Jerry 3 4 Jessca Tom merage: id1 val_x id2 val_y 0 1 Jerry 1 Kerry 1 2 Tom 2 Peter 2 3 Kerry 3 Jerry 3 4 Jessca 4 Tom merage: id1 val_x id2 val_y 0 1.0 Jerry 1 Kerry 1 2.0 Tom 2 Peter 2 3.0 Kerry 3 Jerry 3 4.0 Jessca 4 Tom 4 NaN NaN 5 Jessca
#2.2.2合并数组 def join_data(): df1 = pd.DataFrame([['苏州','南京'],['广州','深圳'],['宁波','杭州']], index =['江苏','广东','浙江'], columns=['城市1','城市2']) df2 = pd.DataFrame([['赣州','南昌'],['成都','泸州'],['宁波','杭州']], index =['江西','四川','浙江'], columns=['城市3','城市4']) print("df1 is:\n",df1) print("df2 is:\n",df2) print("join:\n",df1.join(df2)) print("outer join:\n",df1.join(df2,how='outer'))
输出:
df1 is: 城市1 城市2 江苏 苏州 南京 广东 广州 深圳 浙江 宁波 杭州 df2 is: 城市3 城市4 江西 赣州 南昌 四川 成都 泸州 浙江 宁波 杭州 join: 城市1 城市2 城市3 城市4 江苏 苏州 南京 NaN NaN 广东 广州 深圳 NaN NaN 浙江 宁波 杭州 宁波 杭州 outer join: 城市1 城市2 城市3 城市4 四川 NaN NaN 成都 泸州 广东 广州 深圳 NaN NaN 江苏 苏州 南京 NaN NaN 江西 NaN NaN 赣州 南昌 浙江 宁波 杭州 宁波 杭州
#2.2.3 合并序列 def concat_data(): s1 = pd.Series([1,2],index=['苏州','南京']) s2 = pd.Series([3,4],index=['广州','深圳']) s3 = pd.Series([5,6],index=['宁波','杭州']) print("concat:\n",pd.concat([s1,s2,s3])) print("concat use key:\n",pd.concat([s1,s2,s3],keys=['江苏','广东','浙江'])) df1 = pd.DataFrame([['苏州','南京'],['广州','深圳'],['宁波','杭州']], index =['江苏','广东','浙江'],columns=['城市1','城市2']) df2 = pd.DataFrame([['赣州','南昌'],['成都','泸州'],['宁波','杭州']], index =['江西','四川','浙江'],columns=['城市1','城市2']) print("concat Dataframe:\n",pd.concat([df1,df2],axis=0,keys=['数据1','数据2'])) print("concat Dataframe:\n",pd.concat([df1,df2],axis=1,keys=['数据1','数据2']))
输出:
concat: 苏州 1 南京 2 广州 3 深圳 4 宁波 5 杭州 6 dtype: int64 concat use key: 江苏 苏州 1 南京 2 广东 广州 3 深圳 4 浙江 宁波 5 杭州 6 dtype: int64 concatDataframe: 城市1 城市2 数据1 江苏 苏州 南京 广东 广州 深圳 浙江 宁波 杭州 数据2 江西 赣州 南昌 四川 成都 泸州 浙江 宁波 杭州 concatDataframe: 数据1 数据2 城市1 城市2 城市1 城市2 江苏 苏州 南京 NaN NaN 广东 广州 深圳 NaN NaN 浙江 宁波 杭州 宁波 杭州 江西 NaN NaN 赣州 南昌 四川 NaN NaN 成都 泸州
2.3重塑和轴向旋转
#2.3.1 轴向旋转 def pivot_data(): df = pd.DataFrame([{"编号":"1","姓名":"Jerry","科目":"语文","成绩":"92"}, {"编号":"1","姓名":"Jerry","科目":"数学","成绩":"97"}, {"编号":"2","姓名":"Tom","科目":"语文","成绩":"100"}, {"编号":"2","姓名":"Tom","科目":"数学","成绩":"91"}]) print("df is:\n",df) print("df stack is:\n",df.stack()) print("df unstack is:\n",df.unstack()) print("df pivot is:\n",df.pivot('编号','科目','成绩')) print("set_index and unstack is:\n",df.set_index(['编号','科目']).unstack())
输出:
df is: 编号 姓名 科目 成绩 0 1 Jerry 语文 92 1 1 Jerry 数学 97 2 2 Tom 语文 100 3 2 Tom 数学 91 df stack is: 0 编号 1 姓名 Jerry 科目 语文 成绩 92 1 编号 1 姓名 Jerry 科目 数学 成绩 97 2 编号 2 姓名 Tom 科目 语文 成绩 100 3 编号 2 姓名 Tom 科目 数学 成绩 91 dtype: object df unstack is: 编号0 1 1 1 2 2 3 2 姓名0 Jerry 1 Jerry 2 Tom 3 Tom 科目0 语文 1 数学 2 语文 3 数学 成绩0 92 1 97 2 100 3 91 dtype: object df pivot is: 科目 数学 语文 编号 1 97 92 2 91 100 set_index andunstack is: 姓名 成绩 科目 数学 语文 数学 语文 编号 1 Jerry Jerry 97 92 2 Tom Tom 91 100
#2.3.2 重塑 def melt_data(): df = pd.DataFrame({'属性':['编号','年龄','手机'], '张三':['1',54,'13681766555'], '李四':['2',32,'13966564433'], '王五':['3',48,'18977665643'] }) print("df is:\n",df) melt_res = pd.melt(df,['属性']) print("melt:\n",melt_res) print("pivot:\n",melt_res.pivot('属性','variable','value'))
输出:
df is: 属性 张三 李四 王五 0 1 2 3 1 年龄 54 32 48 2 手机 13681766555 13966564433 18977665643 melt: 属性 variable value 0 编号 张三 1 1 年龄 张三 54 2 手机 张三 13681766555 3 编号 李四 2 4 年龄 李四 32 5 手机 李四 13966564433 6 编号 王五 3 7 年龄 王五 48 8 手机 王五 18977665643 pivot: variable 张三 李四 王五 属性 年龄 54 32 48 手机 13681766555 13966564433 18977665643 编号 1 2 3
if __name__=="__main__": data_info() change_type() judge_is_null() replace_null() is_duplicate() drop_duplicate() data_type_transfer() data_replace() data_categories() data_filter() str_deal() data_index() merge_data() join_data() concat_data() pivot_data() melt_data()
—————————————————————————————————
软件安全测试
https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486
接口自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486
DevOps 和Jenkins之DevOps
https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486
DevOps与Jenkins 2.0之Jenkins
https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486
Selenium自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486
性能测试第1季:性能测试基础知识
https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486
性能测试第2季:LoadRunner12使用
https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486
性能测试第3季:JMeter工具使用
https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486
性能测试第4季:监控与调优
https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486
Django入门
https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486
啄木鸟顾老师漫谈软件测试
https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486