项目10 数据分析Pandas基础_第1页
项目10 数据分析Pandas基础_第2页
项目10 数据分析Pandas基础_第3页
项目10 数据分析Pandas基础_第4页
项目10 数据分析Pandas基础_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据分析Pandas入门项目十数据分析Pandas入门10.数据分析Pandas入门10.1初识pandas 10.2pandas数据结构10.1初识pandas

数字类型是Python中的一种数据类型,指的是Python程序中所用到的数字。根据数字的不同特点,将数字类型细分为整型(int)、浮点型(float)、复数类型(complex)和布尔类型(bool)。整型:Python程序中的整数。如10、21、33。浮点型:Python程序中的小数或指数。如3.14、4.0、5.3E-3。复数类型:Python程序中用a+bj或a+bJ表示的,a为复数的实部,b为复数的虚部。如1+2j、3-4j。布尔类型:用于描述条件判断的结果,只有True和False两个值。True为真,False为假。

Pandas是Python语言的一个扩展程序库,用于数据分析。

Pandas是一个开放源码、BSD许可的库,提供高性能、易于使用的数据结构和数据分析工具。

Pandas名字衍生自术语"paneldata"(面板数据)和"Pythondataanalysis"(Python数据分析)。

Pandas一个强大的分析结构化数据的工具集,基础是

Numpy(提供高性能的矩阵运算)。10.1初识pandas

数字类型是Python中的一种数据类型,指的是Python程序中所用到的数字。根据数字的不同特点,将数字类型细分为整型(int)、浮点型(float)、复数类型(complex)和布尔类型(bool)。整型:Python程序中的整数。如10、21、33。浮点型:Python程序中的小数或指数。如3.14、4.0、5.3E-3。复数类型:Python程序中用a+bj或a+bJ表示的,a为复数的实部,b为复数的虚部。如1+2j、3-4j。布尔类型:用于描述条件判断的结果,只有True和False两个值。True为真,False为假。

Pandas可以从各种文件格式比如CSV、JSON、SQL、MicrosoftExcel导入数据。

Pandas可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。

Pandas广泛应用在学术、金融、统计学等各个数据分析领域。10.2pandas数据结构10.2.1Series数据结构 10.2.2DataFrame数据结构10.2.3DataFrame数据操作10.2.4DataFrame统计汇总10.2.5DataFrame数据清洗10.2.6DataFrame数据分析及可视化10.2pandas数据结构

Pandas导入规则importpandasaspdPandas主要有Series和DataFrame两种数据类型。10.2pandas数据结构

10.2.1Series数据结构

Series是一维数据结构,相当于Excel表格中的一列,能够保存任何数据类型(整数、浮点数、字符串等)。Series由一组(列)数据及与之相关的索引(相当于Excel中的行号)组成,每个数据带有一个自动索引(默认从0开始递增),也可以自定义索引(行号)名称,用于对数据进行说明。10.2pandas数据结构

X=pd.Series(data,index)参数data为数据,可以是字典、列表、Numpy的ndarray数组等;参数index为索引,值必须唯一,类似于Python字典的键,可以不传,默认为从0开始递增的整数。1.Series对象的格式10.2.1Series数据结构10.2pandas数据结构

10.2.1Series数据结构(1)使用自动索引创建Series对象

importpandasaspd

x=pd.Series([1000,2000,3000,4000,5000,6000])

print(x)注释:

第一行导入pandas包

第二行调用pd.Series()函数,以列表[1000,2000,3000,4000,5000,6000]为参数,创建对象x

第三行输出对象x1.Series对象的格式示例(1)10.2pandas数据结构

运行结果如下:010001200023000340004500056000dtype:int64在输出结果中第一列为自动创建的索引(行号),如果没有指定索引,默认从0开始递增。第二列为数据,相当于给对象x的每一个数据增加了一个索引名(行号),构成一个Series结构数据。第1列第2列10.2.1Series数据结构10.2pandas数据结构

10.2.1Series数据结构(2)使用自定义索引创建Series对象

importpandasaspd

x=pd.Series([1000,2000,3000,4000,5000,6000],index=["1月份销售额","2月份销售额","3月份销售额","4月份销售额","5月份销售额","6月份销售额"])

print(x)注释:

在创建Series对象时,可以为数据增加自定义索引,相当于每行数据含义或名称,Series()函数包括两参数,第一个参数为数据,第二个参数使用index为数据行指定数据含义或名称。索引名称与数据要一一对应。1.Series对象的格式示例(2)10.2pandas数据结构

运行结果如下:1月份销售额10002月份销售额20003月份销售额30004月份销售额40005月份销售额50006月份销售额6000dtype:int6410.2.1Series数据结构10.2pandas数据结构

10.2.1Series数据结构(3)使用字典为Series创建对象

importpandasaspd

x1={"1月份销售额":1000,"2月份销售额":2000,"3月份销售额":3000,"4月份销售额":4000,"5月份销售额":5000,"6月份销售额":6000}x=pd.Series(x1)

print(x)1.Series对象的格式示例(3)10.2pandas数据结构

运行结果如下:1月份销售额10002月份销售额20003月份销售额30004月份销售额40005月份销售额50006月份销售额6000dtype:int64在输出结果中使用x1字典作为Series()函数参数,则字典的键值就成为数据的索引名称。10.2.1Series数据结构10.2.1.2.Series对象基本操作●获取索引及修改索引●增加数据●指定索引对应数据删除●指定索引对应元素的获取●通过条件筛选获取数据●通过条件筛选获取数据●统计信息●有条件的运算10.2pandas数据结构

importpandasaspd

x1={"1月份销售额":1000,"2月份销售额":2000,"3月份销售额":3000,"4月份销售额":4000,"5月份销售额":5000,"6月份销售额":6000}

x=pd.Series(x1)

#获取X对象索引

print('1.修改前索引名称:',x.index)

#修改X对象索引名称

x.index=['1月销售','2月销售','3月销售','4月销售','5月销售','6月销售']

#输出修改后的索引名称

print('2.修改后索引名称:',x.index)2.Series对象基本操作示例(1)●获取索引及修改索引10.2.1Series数据结构10.2pandas数据结构

运行结果如下:1.修改前索引名称:Index(['1月份销售额','2月份销售额','3月份销售额','4月份销售额','5月份销售额','6月份销售额'],dtype='object')2.修改后索引名称:Index(['1月销售','2月销售','3月销售','4月销售','5月销售','6月销售'],dtype='object')10.2.1Series数据结构10.2pandas数据结构

importpandasaspd

x1={"1月份销售额":1000,2月份销售额":2000,"3月份销售额":3000,"4月份销售额":4000,"5月份销售额":5000,"6月份销售额":6000}

x=pd.Series(x1)#增加两个数据

x['1-6月合计']=sum(x)#索引名为‘1-6月合计’,数值为1-6月的合计数

x['7月份销售额']=8500

print(x)

print('-'*30)2.Series对象基本操作示例(2)●增加数据10.2.1Series数据结构10.2pandas数据结构

运行结果如下:1月份销售额10002月份销售额20003月份销售额30004月份销售额40005月份销售额50006月份销售额60001-6月合计210007月份销售额8500dtype:int64------------------------------在输出结果中:由于Series数据结构为1列,所以增加的数据只能在最后一行插入。10.2.1Series数据结构在行后面插入数据10.2pandas数据结构

#删除7月份销售数据

x=x.drop('7月份销售额')

print(x)2.Series对象基本操作示例(3)●删除指定索引对应数据10.2.1Series数据结构10.2pandas数据结构

运行结果如下:1月份销售额10002月份销售额20003月份销售额30004月份销售额40005月份销售额50006月份销售额60001-6月合计21000dtype:int64使用drop()函数删除数据。10.2.1Series数据结构10.2pandas数据结构

#获取4-6月销售数据

print(x['4月份销售额':'6月份销售额'])2.Series对象基本操作示例(4)●指定索引对应元素的获取10.2.1Series数据结构10.2pandas数据结构

运行结果如下:4月份销售额40005月份销售额50006月份销售额6000dtype:int64x['4月份销售额':'6月份销售额'],字段名用[],从起始位置一直尾,中间用’:’。10.2.1Series数据结构10.2pandas数据结构

#获取销售额大于4000的销售数据

print(x[x>4000])2.Series对象基本操作示例(5)●通过条件筛选获取数据10.2.1Series数据结构10.2pandas数据结构

运行结果如下:5月份销售额50006月份销售额6000dtype:int6410.2.1Series数据结构10.2pandas数据结构

#修改3月份销售额

x["3月份销售额"]=3500

print(x)2.Series对象基本操作示例(6)●指定索引对应元素的修改10.2.1Series数据结构10.2pandas数据结构

运行结果如下:1月份销售额10002月份销售额20003月份销售额35004月份销售额40005月份销售额50006月份销售额6000dtype:int6410.2.1Series数据结构3月份销售额改为350010.2pandas数据结构

importpandasaspd

x1={"1月份销售额":1000,"2月份销售额":2000,"3月份销售额":3000,"4月份销售额":4000,"5月份销售额":5000,"6月份销售额":6000}

x=pd.Series(x1)

print(x.describe())2.Series对象基本操作示例(7)●统计信息10.2.1Series数据结构10.2pandas数据结构

运行结果如下:count6.000000mean3500.000000std1870.828693min1000.00000025%2250.00000050%3500.00000075%4750.000000max6000.000000dtype:float6410.2.1Series数据结构10.2pandas数据结构

也可以通过如下方法分别获取:min():获取最小值max():获取最大值mean():获取均值median():获取中位数sum():获取总和count():获取总数10.2.1Series数据结构10.2pandas数据结构

mportpandasaspd

x1={"1月份销售额":1000,"2月份销售额":2000,"3月份销售额":3000,"4月份销售额":4000,"5月份销售额":5000,"6月份销售额":6000}

x=pd.Series(x1)

#先筛选出销售额大于4000的月份,在原来基础上增加50%

x2=x[x>4000]

x2=x2*0.5+x2

print('-'*30)

print(x2)2.Series对象基本操作示例(8)●有条件的运算10.2.1Series数据结构10.2pandas数据结构

运行结果如下:------------------------------5月份销售额7500.06月份销售额9000.0dtype:float64------------------------------10.2.1Series数据结构

【技能实训】

用字典创建五门课程的名称及成绩,并用describe()函数进行分析统计,结果保留两位小数。课程名称:语文90,数学75,英语85,体育82,化学70importpandasaspdcj={'语文':90,'数学':75,'英语':85,'体育':82,'化学':70}cj=pd.Series(cj)print(round(cj.describe(),2))10.2pandas

数据结构

10.2.1Series数据结构示例(9)10.2pandas数据结构

运行结果如下:count5.00

#课程门数mean80.40

#平均分std7.96

#课程标准差min70.00

#最低分数25%75.00

#25%分位是75分50%82.00#50%分位是82分75%85.00

#75%分位是85分max90.00

#最高分数dtype:float64Round()是四舍五入保留小数位函数,用法Round(数值,小数位)。10.2.1Series数据结构10.2pandas数据结构

10.2.2DataFrame数据结构

DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,类似于Excel、SQL表,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引(行名称、标签)也有列索引(列名称、标签),可以被看做是由Series组成的字典。10.2pandas数据结构

X=pd.DataFrame(data,index,columns,dtype,copy)参数说明:

data:一组数据(ndarray、series,map,lists,dict等类型)。

index:索引值,或者可以称为行标签。

columns:列标签,默认为RangeIndex(0,1,2,…,n)。

dtype:数据类型。

copy:拷贝数据,默认为False。

PandasDataFrame是一个二维的数组结构,类似二维数组。●DataFrame对象格式10.2.2DataFrame数据结构10.2pandas数据结构

根据以下某公司部分工资明细表,创建DataFrame。10.2.2DataFrame数据结构10.2pandas数据结构

#导入Pandasimportpandasaspd#创建工资明细表二维表Gz=[['李文文','财务部','经理',5000,8000],['张宝强','财务部','员工',4500,5500],['赵强','财务部','员工',4800,6000],['吕小雯','销售部','经理',5500,8500],['陈国中','销售部','员工',3500,4500],['黄彩虹','销售部','员工',3800,5000],['赵忠','生产部','经理',6000,9000],['李发旺','生产部','员工',5400,6000],['王武','生产部','员工',4500,7000]]df=pd.DataFrame(Gz)print(df)示例10.2.2(1)●使用列表创建10.2.2DataFrame数据结构10.2pandas数据结构

运行结果如下:

01

2

3

40李文文财务部经理500080001张宝强财务部员工450055002赵强

财务部员工480060003吕小雯销售部经理550085004陈国中销售部员工350045005黄彩虹销售部员工380050006赵忠

生产部经理600090007李发旺生产部员工540060008王武

生产部员工4500700010.2.2DataFrame数据结构10.2pandas数据结构

#增加列名称df.columns=["姓名","部门",'职务','基本工资','津贴补贴']#增加索引(行,序号),从1开始,不大于10,按整数排列df.index=range(1,10)示例10.2.2(2)增加列名及索引名称10.2.2DataFrame数据结构10.2pandas数据结构

运行结果如下:

姓名部门

职务基本工资津贴补贴1李文文财务部经理500080002张宝强财务部员工450055003赵强

财务部员工480060004吕小雯销售部经理550085005陈国中销售部员工350045006黄彩虹销售部员工380050007赵忠

生产部经理600090008李发旺生产部员工540060009王武

生产部员工4500700010.2.2DataFrame数据结构10.2pandas数据结构

#导入PandasimportpandasaspdGz={'姓名':['李文文','张宝强','赵强','吕小雯','陈国中','黄彩虹','赵忠','李发旺','王武'],'部门':['财务部','财务部','财务部','销售部','销售部','销售部','生产部','生产部','生产部'],'职务':['经理','员工','员工','经理','员工','员工','经理','员工','员工'],'基本工资':[5000,4500,4800,5500,3500,3800,6000,5400,4500],'津贴补贴':[8000,5500,6000,8500,4500,5000,9000,6000,7000]}df=pd.DataFrame(Gz)#修改索引名(序号)df.index=range(1,10)print(df)示例10.2.2(3)●使用包含列表字典创建10.2.2DataFrame数据结构10.2pandas数据结构

运行结果如下:

姓名

部门

职务基本工资津贴补贴1李文文财务部经理500080002张宝强财务部员工450055003赵强

财务部员工480060004吕小雯销售部经理550085005陈国中销售部员工350045006黄彩虹销售部员工380050007赵忠

生产部经理600090008李发旺生产部员工540060009王武

生产部员工4500700010.2.2DataFrame数据结构10.2pandas数据结构

#新增应发合计列,并进行运算:应发合计=基本工资+津贴补贴df['应发合计']=df['基本工资']+df['津贴补贴']#新增社保公积金列,社保及公积金个人扣缴比例为23%,并进行运算:社保公积金#=应发合计*0.23df['社保公积金']=df['应发合计']*0.23#新增实发合计列,并进行运算:实发合计=应发合计-社保公积金df['实发合计']=df['应发合计']-df['社保公积金']print(df)示例10.2.3(1)●增加多列并运算10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:

姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计1李文文财务部经理50008000130002990.010010.02张宝强财务部员工45005500100002300.07700.03赵强

财务部员工48006000108002484.08316.04吕小雯销售部经理55008500140003220.010780.05陈国中销售部员工3500450080001840.06160.06黄彩虹销售部员工3800500088002024.06776.07赵忠

生产部经理60009000150003450.011550.08李发旺生产部员工54006000114002622.08778.09王武

生产部员工45007000115002645.08855.010.2.3DataFrame数据操作10.2pandas数据结构

importpandasaspd#设置打印结果为数字对齐pd.set_option('display.unicode.ambiguous_as_wide',True)pd.set_option('display.unicode.east_asian_width',True)Gz={'姓名':['李文文','张宝强','赵强','吕小雯','陈国中','黄彩虹','赵忠','李发旺','王武'],'部门':['财务部','财务部','财务部','销售部','销售部','销售部','生产部','生产部','生产部'],'职务':['经理','员工','员工','经理','员工','员工','经理','员工','员工'],'基本工资':[5000,4500,4800,5500,3500,3800,6000,5400,4500],'津贴补贴':[8000,5500,6000,8500,4500,5000,9000,6000,7000]}df=pd.DataFrame(Gz)示例10.2.3(2)●为行、列索引添加名称并设置打印数字对齐10.2.3DataFrame数据操作10.2pandas数据结构

#修改索引名(序号),从1开始,默认为从0开始df.index=range(1,10)#新增应发合计列,并进行运算:应发合计=基本工资+津贴补贴df['应发合计']=df['基本工资']+df['津贴补贴']#新增社保公积金列,社保及公积金个人扣缴比例为23%,并进行运算:社保公积金=应发合计*0.23df['社保公积金']=df['应发合计']*0.23#新增实发合计列,并进行运算:实发合计=应发合计-社保公积金df['实发合计']=df['应发合计']-df['社保公积金']#设置行索引名称为‘序号’='序号'#设置列索引名称为‘项目’='项目'print(df)示例10.2.3(2)续●为行、列索引添加名称并设置打印数字对齐10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:

项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号1李文文财务部经理50008000130002990.010010.02张宝强财务部员工45005500100002300.07700.03赵强

财务部员工48006000108002484.08316.04吕小雯销售部经理55008500140003220.010780.05陈国中销售部员工3500450080001840.06160.06黄彩虹销售部员工3800500088002024.06776.07赵忠

生产部经理60009000150003450.011550.08李发旺生产部员工54006000114002622.08778.09王武

生产部员工45007000115002645.08855.010.2.3DataFrame数据操作10.2pandas数据结构

将工资表保存到桌面文件夹,格式为xlsx的电子表格第一种方法:使用正斜杠”/”df.to_excel("C:/Users/Administrator/工资明细表.xlsx")第二种方法:使用双反斜杠”/”df.to_excel("C:\\Users\\Administrator\\工资明细表.xlsx")第三种方法:在前面加r,保持字符原始值●工资表保存与读取10.2.3DataFrame数据操作10.2pandas数据结构

df.to_excel(r"C:\Users\Administrator\工资明细表.xlsx")示例10.2.3(3)●工资表保存与读取10.2.3DataFrame数据操作10.2pandas数据结构

输出的Excel文件并打开结果如下:

10.2.3DataFrame数据操作10.2pandas数据结构

df2=pd.read_excel("C:/Users/Administrator/工资明细表.xlsx")知识拓展:

#显示所有列

pd.set_option('display.max_columns',None)

#显示所有行

pd.set_option('display.max_rows',None)

#设置value的显示长度为100,默认为50

#pd.set_option('max_colwidth',500)

#设置打印输出不换行显示

pd.set_option('display.width',1000)如要读入工资表:10.2.3DataFrame数据操作10.2pandas数据结构

print(df['姓名'])示例10.2.3(4)●单列输出10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:序号1李文文2张宝强3赵强4吕小雯5陈国中6黄彩虹7赵忠8李发旺9王武Name:姓名,dtype:object10.2.3DataFrame数据操作10.2pandas数据结构

print(df[['姓名','职务','部门','应发合计']])示例10.2.3(5)●多列输出10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:

项目姓名职务部门应发合计序号1李文文经理财务部130002张宝强员工财务部100003赵强员工财务部108004吕小雯经理销售部140005陈国中员工销售部80006黄彩虹员工销售部88007赵忠经理生产部150008李发旺员工生产部114009王武员工生产部1150010.2.3DataFrame数据操作多列输出使用df[[‘列1’,’列2’,……]]格式10.2pandas数据结构

print(df[df['应发合计']>10000])示例10.2.3(6)查询应发合计大于10000的员工●查询过滤10.2.3DataFrame数据操作●按条件查询,显示所有列10.2pandas数据结构

运行结果如下:项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号1李文文财务部经理50008000130002990.010010.03赵强财务部员工48006000108002484.08316.04吕小雯销售部经理55008500140003220.010780.07赵忠生产部经理60009000150003450.011550.08李发旺生产部员工54006000114002622.08778.09王武生产部员工45007000115002645.08855.010.2.3DataFrame数据操作筛选出应发合计大于10000的记录10.2pandas数据结构

df1=df[df['应发合计']>10000]print(df1[['姓名','应发合计']])示例10.2.3(7)查询应发合计大于10000的员工,显示姓名、应发合计●查询过滤10.2.3DataFrame数据操作●按条件查询,显示部分列上述代码可合成print(df[['姓名','应发合计']][df['应发合计']>10000])10.2pandas数据结构

运行结果如下:项目姓名应发合计序号1李文文130003赵强108004吕小雯140007赵忠150008李发旺114009王武1150010.2.3DataFrame数据操作10.2pandas数据结构

print(df[['部门','应发合计']][df['应发合计']==df['应发合计'].max()])示例10.2.3(8)查询应发合计的最大,显示部门、应发合计●查询过滤10.2.3DataFrame数据操作●按条件查询,显示部分列上述代码可合成print(df[['姓名','应发合计']][df['应发合计']>10000])10.2pandas数据结构

运行结果如下:项目部门应发合计序号7生产部1500010.2.3DataFrame数据操作

显示部分列用[[“”,””….]]表示,如上题显示部门、应发合计用df[['部门','应发合计']]表示;有条件显示部分列,在其后面加上[条件表达式],如上题查询应发合计最大的部门,用[df['应发合计']==df['应发合计'].max()])表示。print(df[(df['职务']=='经理')&(df['应发合计']>13000)])10.2pandas数据结构

df=df[df.姓名.str.contains('李')]

print(df)示例10.2.3(9)查询姓名包含“李”姓的所有员工●模糊查询10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号1李文文财务部经理50008000130002990.010010.08李发旺生产部员工54006000114002622.08778.010.2.3DataFrame数据操作筛选出姓名包含“李”10.2pandas数据结构

print(df[df['姓名']=='赵强'])示例10.2.3(10)查询姓名为“赵强”的员工●精准查询10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号3赵强财务部员工48006000108002484.08316.010.2.3DataFrame数据操作10.2pandas数据结构

print(df[(df['职务']=='经理')&(df['应发合计']>13000)])示例10.2.3(11)查询职务为经理并且应发合计大于13000元的员工●多条件查询10.2.3DataFrame数据操作

多条件查询每个条件用()括起来,“并且”用&表示,“或者”用|表示,上题第一个条件职务为经理用(df['职务']=='经理')表示,条件是并且关系用&表示,第二条件是应发合计大于13000元,用(df['应发合计']>13000)表示。10.2pandas数据结构

运行结果如下:姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计4吕小雯销售部经理55008500140003220.010780.07赵忠生产部经理60009000150003450.011550.010.2.3DataFrame数据操作10.2pandas数据结构

print(df[['姓名','部门','职务','应发合计']][(df['职务']=='经理')&(df['应发合计']>13000)])示例10.2.3(12)可改成只显示姓名、部门、职务、应发合计●多条件查询10.2.3DataFrame数据操作10.2pandas数据结构

运行结果如下:姓名部门职务应发合计4吕小雯销售部经理140007赵忠生产部经理1500010.2.3DataFrame数据操作10.2pandas数据结构

print(df.columns)示例10.2.3(13)●DataFrame的属性和方法10.2.3DataFrame数据操作●获取列名10.2pandas数据结构

运行结果如下:

Index(['姓名','部门','职务','基本工资','津贴补贴','应发合计','社保公积金','实发合计'],dtype='object',name='项目')10.2.3DataFrame数据操作10.2pandas数据结构

print(df.shape)示例10.2.3(14)●DataFrame的属性和方法10.2.3DataFrame数据操作●获取形状(行数和列数)10.2pandas数据结构

运行结果如下:(9,8)10.2.3DataFrame数据操作

数据形状为9行8列10.2pandas数据结构

print(df.describe())#如要保留两位小数:print(round(df.describe(),2))示例10.2.3(15)●DataFrame的属性和方法10.2.3DataFrame数据操作●获取描述统计信息10.2pandas数据结构

运行结果如下:项目基本工资津贴补贴应发合计社保公积金实发合计count9.0000009.0000009.0000009.0000009.000000mean4777.7777786611.11111111388.8888892619.4444448769.444444std805.8811601596.4370052316.486804532.7919651783.694839min3500.0000004500.0000008000.0000001840.0000006160.00000025%4500.0000005500.00000010000.0000002300.0000007700.00000050%4800.0000006000.00000011400.0000002622.0000008778.00000075%5400.0000008000.00000013000.0000002990.00000010010.000000max6000.0000009000.00000015000.0000003450.00000011550.00000010.2.3DataFrame数据操作10.2pandas数据结构

Count:统计每列元素个数,每一行代表一个记录,也表示记录数;

Mean:每个工资项目的平均值;

Std:每个工资项目的标准差;

Min:每个工资项目的最小值;

25%:第一四分位数,表示每个工资项目从小到大排序时,此数位于第1/4分位点处。说明:●DataFrame的属性和方法10.2.3DataFrame数据操作●获取描述统计信息10.2pandas数据结构

50%:第二四分位数,表示每个工资项目从小到大排序时,此数位于第1/2分位点处。观察此数相当于平均数的大小,可发现此分位点数的大于平均值,说明一半以上的员工大于平均值。如应发合计的1/2分位点为11400元,平均工资为11388.89元,说明有一半的职工工资大于平均工资。75%:第三四分位数,表示每个工资项目从小到大排序时,此数位于第3/4分位点处。如应发合计的3/4分位点为13000元,说明有25%的职工工资大于13000元。Max:每工资项目的最大值说明:●DataFrame的属性和方法10.2.3DataFrame数据操作●获取描述统计信息10.2pandas数据结构

●DataFrame的属性和方法10.2.3DataFrame数据操作●使用loc方法和iloc方法iloc,即indexlocate用index索引进行定位访问数据的方法,所以参数是整型;loc,则可以使用column(列)名和index(行)名进行定位,loc[]中括号里面是先行后列,以逗号分割,行和列分别是行标签(行名)和列标签(列名)。10.2pandas数据结构

print(df.loc[3,'姓名'])示例10.2.3(16)要找出赵强:●DataFrame的属性和方法10.2.3DataFrame数据操作●使用loc方法和iloc方法10.2pandas数据结构

运行结果如下:赵强进程已结束,退出代码010.2.3DataFrame数据操作

赵强位置在第序号姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计01李文文财务部经理500080001300029901001012张宝强财务部员工45005500100002300770023赵强财务部员工48006000108002484831634吕小雯销售部经理5500115001400032201078045陈国中销售部员工3500750080001840616056黄彩虹销售部员工3800800088002024677667赵忠生产部经理600090001500034501155078李发旺生产部员工54006000114002622877889王武生产部员工4500700011500264588553行10.2pandas数据结构

print(df.loc[4:6,['姓名','部门','职务','应发合计']])示例10.2.3(17)如要找出一个区域,比如查询销售部、姓名、部门、职务、应发合计:●DataFrame的属性和方法10.2.3DataFrame数据操作●使用loc方法和iloc方法10.2pandas数据结构

运行结果如下:项目姓名部门职务应发合计序号4吕小雯销售部经理140005陈国中销售部员工80006黄彩虹销售部员工8800进程已结束,退出代码010.2.3DataFrame数据操作10.2pandas数据结构

因为要查询销售部的数据,销售部行索引为4-6,列名为姓名、部门、职务、应发合计,行列标签之间用逗号隔开,行标签与行标签之间用冒号隔开。无论选择单行还是多行或单列多列,本质还是a[x,y]的表示形式,其中X或y可以省略。iloc[]与loc[]一样,中括号里面也是先行后列,行列标签用逗号分割,与loc不同的是,iloc是根据行数与列数来索引的。【示例10.2.3(17)】说明:●DataFrame的属性和方法10.2.3DataFrame数据操作●使用loc方法和iloc方法10.2pandas数据结构

如上题可表示为:

print(df.iloc[3:6,[0,1,2,5]])

查询行从索引0算起,第3到5行,列索引从0算起,第0列、1列、2列、5列

print(df.iloc[[1,3,5],[2,4]])

查询行从索引0算起,为1行、3行、5行,列索引从0算起,为2列、4列

注意:行索引是前开后开,比如0:3表示从第0行到第3行,不包括第3行,列索引是前开后闭,如0:3表示从第0列到第3列,包括第3列。【示例10.2.3(17)】说明:●DataFrame的属性和方法10.2.3DataFrame数据操作●使用loc方法和iloc方法10.2pandas数据结构

print(df.T)示例10.2.3(18)将原来数据的行转成列、将列转成行排列,使用大写’T’方法●DataFrame的属性和方法10.2.3DataFrame数据操作●数据行、列转置10.2pandas数据结构

运行结果如下:序号1234...6789项目...姓名李文文张宝强赵强吕小雯...黄彩虹赵忠李发旺王武部门财务部财务部财务部销售部...销售部生产部生产部生产部职务经理员工员工经理...员工经理员工员工基本工资5000450048005500...3800600054004500津贴补贴8000550060008500...5000900060007000应发合计13000100001080014000...8800150001140011500社保公积金2990.02300.02484.03220.0...2024.03450.02622.02645.0实发合计10010.07700.08316.010780.0...6776.011550.08778.08855.0[8rowsx9columns]10.2.3DataFrame数据操作10.2pandas数据结构

1.Sort_index(columns=None,axis=0,ascending=Flase),其中axis=0为默认值,是指按照index(索引)对数据进行降序,如果axis=1,是指按照index(索引)对数据进行升序;df.sort_index(axis=0,ascending=False)

2.如按照某个变量(列)的取值对对象进行排序,则需要指定参数sort_values()取值。如:对应发工资进行排序,顺序为从高到低ascending=False,如升序排列,ascending=True用sort()函数:●DataFrame的属性和方法10.2.3DataFrame数据操作●设置工资项目排序10.2pandas数据结构

df1=df.sort_values(by='应发合计',ascending=True)

print(df1)示例10.2.3(19)按”应发合计”进行排序,顺序从低到高●DataFrame的属性和方法10.2.3DataFrame数据操作●设置工资项目排序10.2pandas数据结构

运行结果如下:项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号5陈国中销售部员工3500450080001840.06160.06黄彩虹销售部员工3800500088002024.06776.02张宝强财务部员工45005500100002300.07700.03赵强财务部员工48006000108002484.08316.08李发旺生产部员工54006000114002622.08778.09王武生产部员工45007000115002645.08855.01李文文财务部经理50008000130002990.010010.04吕小雯销售部经理55008500140003220.010780.07赵忠生产部经理60009000150003450.011550.0进程已结束,退出代码010.2.3DataFrame数据操作10.2pandas数据结构

print(df.sort_values(by=['部门','应发合计'],ascending=False))示例10.2.3(20)按多个工资项目的值进行排序)●DataFrame的属性和方法10.2.3DataFrame数据操作●设置工资项目排序10.2pandas数据结构

运行结果如下:项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号4吕小雯销售部经理55008500140003220.010780.06黄彩虹销售部员工3800500088002024.06776.05陈国中销售部员工3500450080001840.06160.01李文文财务部经理50008000130002990.010010.03赵强财务部员工48006000108002484.08316.02张宝强财务部员工45005500100002300.07700.07赵忠生产部经理60009000150003450.011550.09王武生产部员工45007000115002645.08855.08李发旺生产部员工54006000114002622.08778.0进程已结束,退出代码010.2.3DataFrame数据操作

【技能实训】

找出应发合计大于14000元的职工,并显示其姓名、部门、职务、应发合计分析:先按df['应发合计']>14000进行行的筛选,再按[['姓名','部门','职务','应发合计']]要求显示列。

print(df.loc[df['应发合计']>14000][['姓名','部门','职务','应发合计']])10.2pandas

数据结构

10.2.3DataFrame数据操作示例10.2.3(21)10.2pandas数据结构

运行结果如下:项目姓名部门职务应发合计序号6赵忠生产部经理1500010.2.3DataFrame数据操作10.2pandas数据结构

#统计每项工资项目的最大值='统计工资项目最大值:'print(df.iloc[:,3:8].max())#等介于print(df.iloc[:,3:8].max(axis=0))print('-'*30)#统计每项工资项目的最小值='统计工资项目最小值:'print(df.iloc[:,3:8].min())#等介于print(df.iloc[:,3:8].min(axis=0))print('-'*30)#统计每项工资项目的平均值='统计工资项目平均值:'print(df.iloc[:,3:8].mean())#等介于print(df.iloc[:,3:8].mean(axis=0))print('-'*30)示例10.2.4.(1)求工资项目的最大值、最小值及平均值●求最大值与最小值、平均值10.2.4DataFrame统计汇总10.2pandas数据结构

1.='统计工资项目最大值:'修改输出标题2.统计数值型工资项目数据从第3列到第8列,列索引从0到7列,不包括第8列3.最大值Max()函数、最小值Min()函数、求和Sum()函数、平均值Mean()函数等计算,如按列进行计算,则参数axis=0,默认可省略,若按行计算则参数axis=1,必须指定。另外要注意,这些统计计算函数在计算时,是对整个数据集的所有列或行都进行计算,包括字符型列及行,所以有时会出现错误。说明:●求最大值与最小值、平均值10.2.4DataFrame统计汇总10.2pandas数据结构

运行结果如下:统计工资项目最大值:基本工资6000.0津贴补贴9000.0应发合计15000.0社保公积金3450.0实发合计11550.0dtype:float64------------------------------统计工资项目最小值:基本工资3500.0津贴补贴4500.0应发合计8000.0社保公积金1840.0实发合计6160.0dtype:float64------------------------------统计工资项目平均值:基本工资4777.777778津贴补贴6611.111111应发合计11388.888889社保公积金2619.444444实发合计8769.444444dtype:float64------------------------------10.2.4DataFrame统计汇总10.2pandas数据结构

df.loc['合计']=df.iloc[:,3:8].sum()

print(df)示例10.2.4.(2)●求每项工资项目合计数10.2.4DataFrame统计汇总10.2pandas数据结构

运行结果如下:项目姓名部门职务基本工资津贴补贴应发合计社保公积金实发合计序号0李文文财务部经理5000.08000.013000.02990.010010.01张宝强财务部员工4500.05500.010000.02300.07700.02赵强财务部员工4800.06000.010800.02484.08316.03吕小雯销售部经理5500.08500.014000.03220.010780.04陈国中销售部员工3500.04500.08000.01840.06160.05黄彩虹销售部员工3800.05000.08800.02024.06776.06赵忠生产部经理6000.09000.015000.03450.011550.07李发旺生产部员工5400.06000.011400.02622.08778.08王武生产部员工4500.07000.011500.02645.08855.0合计NaNNaNNaN43000.059500.0102500.023575.078925.010.2.4DataFrame统计汇总10.2pandas数据结构

df1=df.groupby

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论