Python财务应用 课件 项目六 财务数据处理-pandas 应用_第1页
Python财务应用 课件 项目六 财务数据处理-pandas 应用_第2页
Python财务应用 课件 项目六 财务数据处理-pandas 应用_第3页
Python财务应用 课件 项目六 财务数据处理-pandas 应用_第4页
Python财务应用 课件 项目六 财务数据处理-pandas 应用_第5页
已阅读5页,还剩159页未读 继续免费阅读

下载本文档

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

文档简介

创建采购明细表pandas简介Series数据结构应用DataFrame数据结构应用010203目录CONTENTSpandas简介1pandas是Python中常见的数据处理模块,pandas模块是基于Numpy模块的一个开源Python模块,广泛应用于Python中的数据获取、数据处理等工作。初识pandas模块导入pandas模块Python中导入模块都是用import语句实现。importpandasaspd在上面的代码中用as给pandas起了别名,所以在后面的内容中见到“pd”就是代表pandas。pandas模块数据结构ABSeriesDataFrame数

据结

构Series数据结构Series数据结构简单来讲就是带有索引的一维数组,数组是相同数据类型的元素按一定顺序排列的组合,第一列是索引,第二列是数据,索引与数据是一一对应的。DataFrame数据结构DataFrame数据结构是二维数组,它和Excel表格结构非常相似,可以理解为多个一维数组Series组成了DataFrame二维数组,DataFrame由行索引和列索引以及数据构成,由行索引和列索引定位唯一的数据值。Series数据结构应用2Series的创建Series的创建,利用的方法是pd.Series(),这里的pd是pandas的简写,通过给Series()方法传入不同的对象即可实现。Series的创建s1=pd.Series(["单价","数量","收入","成本"])s10单价1数量2收入3成本dtype:object运行结果:Series的创建s2=pd.Series(["单价","数量","收入","成本"],index=[1,2,3,4])s21单价2数量3收入4成本dtype:object运行结果:Series的创建我们也可以将索引与数据以字典的形式传入,这样字典的key值就是索引,value就是数据值。s3=pd.Series({"单价":1,"数量":3,"收入":3,"成本":2})s3单价1数量3收入3成本2dtype:int64运行结果:获取Series的索引获取一组数据的索引是比较常见的操作,可以直接利用index方法获取Series的索引值。s4=pd.Series(["单价","数量","收入","成本"])s4.indexRangeIndex(start=0,stop=4,step=1)运行结果:获取Series的值获取索引的方法类似,获取Series的值,使用的方法是values方法。s6=pd.Series(["单价","数量","收入","成本"])s6.valuesarray(['单价','数量','收入','成本'],dtype=object)运行结果:DataFrame数据结构应用2DataFrame结构在后续的使用中更为常见,它所承载的二维数据组也更符合财务人员的日常使用要求,我们首先要学会创建DataFrame数据结构,利用的方法是pd.DataFrame(),通过给DataFrame()方法传入不同的对象即可实现。DataFrame的创建DataFrame的创建data=["应收账款","应付账款","实收资本"]df1=pd.DataFrame(data)df1运行结果:DataFrame的创建data=(["应收账款",85000],["应付账款",37000,],["实收资本",1116000])df2=pd.DataFrame(data,columns=["会计科目","金额"],index=["资产类","负债类","所有者权益类"])df2运行结果:DataFrame的创建data={"会计科目":["应收账款","应付账款","实收资本"],"期初余额":[85000,97000,116000],"期末余额":[70000,50000,126000]}df3=pd.DataFrame(data,index=range(1,4))df3运行结果:获取DataFrame的列索引我们可以利用columns方法获取DataFrame的列索引。data=(["应收账款",85000],["应付账款",37000,],["实收资本",116000])df4=pd.DataFrame(data,columns=["会计科目","金额"],index=["资产类","负债类","所有者权益类"])df4.columns运行结果:Index(['会计科目','金额'],dtype='object')获取DataFrame的行索引我们利用index方法获取DataFrame的行索引。data=(["应收账款",85000],["应付账款",37000],["实收资本",1116000])df5=pd.DataFrame(data,columns=["会计科目","金额"],index=["资产类","负债类","所有者权益类"])df5.index运行结果:Index(['资产类','负债类','所有者权益类'],dtype='object')感谢观看读取销售统计表读写Excel文件数据预览数据提取010203目录CONTENTS读写Excel文件1读入Excel文件pandas库其实提供了非常灵活的数据读取方式,可以读取很多种主流数据存储格式的文件。读取数据主要用到的是pandas里的read_x()方法,x表示待读入文件的格式。读入Excel文件read_excel(file,sheetname,header)文件路径与文件名列

名,一般以文件的第一行作为列名工作表名称,也可以是数字读入Excel文件运行结果:df=pd.read_excel(r“C:\Users\admin\Desktop\数据表\采购表.xlsx")df读入Excel文件文件路径和名称一定不能出错,如果输入错误,会提示报错并且无法运行,检查语句没问题,上述语句完成运行后,是默认读取工作簿的第一张工作表。Windows中的文件路径默认使用\,这个时候需要在路径前面加一个r(转义符)避免路径里面的\被转义。读入Excel文件运行结果:df1=pd.read_excel(r"C:\Users\admin\Desktop\采购表.xlsx",sheet_name=2)df1导出Excel文件有读入导入自然就有导出,当我们读入导入Excel数据,完成一系列数据修改后,需要将修改后的数据导出到本地的Excel表格保存,用到的是pandas里的to_excel()方法。导出Excel文件to_excel(file_path,index,header)文件路径与文件名表示是否导出列名,默认导出表示是否导出行序号,默认为导出导出Excel文件运行结果:df=pd.DataFrame({"产品名":["办公桌","办公椅","文件柜"],"价格":[1500,450,1350]})df.to_excel(r"C:\Users\admin\Desktop\办公用品采购价格表.xlsx")数据预览2在pandas中,当一个文件读入后,可以用head()方法来控制要显示哪些行。只需要在head后面的括号中输入要展示的数据行数即可,默认展示前5行。数据的简单预览数据的简单预览df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx",sheet_name=0)df.head()运行结果:统计数据表的指标财务数据的表格内容往往数量会很庞大,我们有时需要确定数据表有多少行、多少列。此时需要shape方法即可实现。df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df.shape运行结果:(12,4)统计数据表的指标在Python中我们可以用info()方法查看数据表中的数据类型,而且不需要一列一列查看,在调用info()方法以后就会输出整个表中所有列的数据类型。df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")()运行结果:数据提取3按行列提取数据我们将Excel读入到DataFrame的数据包含了很多的信息,要想从原始数据中截取一部分信息做分析,在pandas中可以通过索引,也就是行和列来进行提取。按行列提取数据df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df["采购物品"]运行结果:按行列提取数据df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df[1:3]运行结果:按条件提取数据在财务数据处理过程中,我们都会有带条件的数据提取需求,比如说获取大于某个值的数据,这种按条件提取数据的方式,在pandas中叫做叫布尔索引,也称为带条件判断的索引。按条件提取数据df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df[df["采购金额"]<300]运行结果:同时提取行列数据有时,我们的财务数据提取需求是只选取某几行的某几列数据时,便不能使用上面的方法了,我们可以使用更为简单的loc方法先选取行,再选取列。loc方法只能使用自定义索引,如数据中没有自定义索引,才可以使用原始索引。它的一般的语法形式是:DataFrame.loc[index,column]同时提取行列数据df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df.loc[3]运行结果:同时提取行列数据df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df.loc[[0,3],["采购物品","采购金额"]]运行结果:还有一种iloc方法也能够对数据进行提取,iloc方法与loc方法的使用几乎相同,唯一不同的是,iloc中只能使用原始索引,不能使用自定义索引。简单来说就是只能使用数字的原始索引进行数据提取。同时提取行列数据同时提取行列数据df=pd.read_excel(r"C:\Users\Administrator\Desktop\采购表.xlsx")df.iloc[3:6,1:3]运行结果:同时提取行列数据根据运行示例我们可以得出,“3:6”代表从行索引3到行索引6(取不到6),即数据显示为行索引3至行索引5;“1:3”代表从列索引1到列索引3(取不到3),即数据显示为列索引1到列索引2。感谢观看清洗成本汇总表缺失数据的操作重复数据的操作财务数据的替换财务数据的排序01020304目录CONTENTS缺失数据的操作1缺失数据的查看缺失值就是由某些原因导致部分数据为空,对于为空的这部分数据我们一般有两种处理方式,一种是删除,即把含有缺失值的数据删除;另一种是填充,即把缺失的那部分数据用某个值代替。缺失数据的查看info()isnull()缺失数据的查看df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")()运行结果:缺失数据的查看df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.isnull()运行结果:缺失数据的删除针对数据表中的缺失为空的数据,一般情况下是要删除的,在pandas库中,我们利用的是dropna()方法,dropna()方法默认删除有缺失值的行,也就是只要某一行有缺失值就把这一行删除。缺失数据的删除df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.dropna(how='all')运行结果:缺失数据的填充工作过程中对于数据表的操作,一般情况下只要数据缺失比例不是过高,尽量别删除,而是选择填充,避免因为删除数据无法找回造成不必要的麻烦。在pandas库中我们利用fillna()方法对数据表中的所有缺失值进行填充,在fillna()后面括号中输入要填充的值即可,例如我们将数据表中的缺失数据全部填充为“0”。缺失数据的填充df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.fillna(0)运行结果:重复数据的操作2按字段进行重复数据删除数据表中的重复数据一般内容相同,但是记录了多条,有时我们需要对重复数据进行甄别,甄别后进行删除处理。在pandas中,我们使用drop_duplicates()方法,该方法默认对所有值进行重复值判断,且默认保留第一个(行)值。按字段进行重复数据删除df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.drop_duplicates()运行结果:按列进行重复数据删除df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.drop_duplicates("产品名称")运行结果:按列进行重复数据删除df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.drop_duplicates(subset=["销售单价","产品名称"])运行结果:自定义重复值删除我们还可以自定义删除重复项时保留哪个值,默认保留重复的第一个值,也可以设置保留重复项的最后一个值,或者全部不保留。通过传入参数keep进行设置,参数keep默认值是first,即保留第一个值;也可以是last,保留最后一个值;还可以是False,即把重复值全部删除。自定义重复值删除df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.drop_duplicates(‘产品名称’,keep="last")运行结果:重置索引

在进行删除后新生成的表格数据索引是混乱的,此时我们需要将索引进行重置,使数据表的索引重新以0开头进行排序,利用reset_index方法可以实现这个需求。重置索引df=pd.read_excel(r"C:\Users\Administrator\Desktop\区域销售统计表.xlsx")df.drop_duplicates(inplace=True)df.reset_index(level=None,drop=True,inplace=True)df运行结果:感谢观看合并收入成本数据数据表常用连接方式数据表其他连接方式数据表纵向合并010203目录CONTENTS数据表常用连接方式1一对一连接就是需要连接的两个数据表有唯一的一列公共列,我们可以通过这一列公共列把两个数据表格连接在一起。使用的是merge()方法。一对一连接一对一连接df1=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=0)df1运行结果:一对一连接df2=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=1)df2运行结果:一对一连接pd.merge(df1,df2)运行结果:多对一连接多对一连接指的是两个数据表的公共列不是一对一的对应关系,其中一个数据表的公共列有重复值,另一个数据表的公共列是唯一的。这两个数据表的拼接结果会是保留第一个数据表的重复值,然后在第二个数据表中增加数据的重复值,达到最后的连接效果。多对一连接df3=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=3)df3运行结果:多对一连接df4=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=4)df4运行结果:多对一连接pd.merge(df3,df4)运行结果:多对多连接多对多连接是指待连接的两个数据表的公共列不是一对一的,两个数据表中的公共列都有重复值。多对多连接是指待连接的两个数据表的公共列不是一对一的,两个数据表中的公共列都有重复值。多对多连接df5=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=5)df5运行结果:多对多连接df6=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=6)df6运行结果:多对多连接pd.merge(df5,df6)运行结果:数据表其他连接方式2merge()方法可以用on参数来指定连接列。on参数指定连接列on参数指定连接列df7=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=7)df7运行结果:on参数指定连接列df8=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=8)df8运行结果:on参数指定连接列pd.merge(df7,df8,on=["物品编码","物品名称"])运行结果:指定左右表的连接列当两个数据表中没有相同的列名,但是数据值一样,我们需要将两个数据表连接,这个时候要分别指定左表和右表的连接列,使用的参数分别是left_on和right_on,left_on参数是指定左表用作连接列的列名,right_on参数是指定右表用作连接列的列名。指定左右表的连接列df9=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=9)df9运行结果:指定左右表的连接列df10=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=10)df10运行结果:指定左右表的连接列pd.merge(df9,df10,left_on="物品编码",right_on="编码")运行结果:索引列做连接列多对多连接是指待连接的两个数据表的公共列不是一对一的,两个数据表中的公共列都有重复值。索引列没有真正的数据,但是可以用来连接两个数据表,使用的参数分别是left_index和right_index,left_index用来指定左表的索引,right_index用来指定右表的索引。索引列做连接列df9=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=9).set_index("物品编码")df9运行结果:索引列做连接列df10=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=10).set_index("编码")df10运行结果:索引列做连接列pd.merge(df9,df10,left_index=True,right_index=True)运行结果:现实情况中我们在操作数据表连接时,可能找不到公共列,这时候需要用参数how来指明具体的连接方式,how=‘inner’表示内连接,how=‘left’表示左连接,how=‘right’表示右连接,how=‘outer’表示外连接。参数how指定连接方式内连接:取两个数据表的交集。左连接:以左数据表为基础,右数据表往左数据表上拼接。右连接:以右数据表为基础,左数据表往右数据表上拼接。外连接:取两个数据表的并集。参数how指定连接方式df9=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=9)df9运行结果:参数how指定连接方式df11=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=11)df11运行结果:参数how指定连接方式pd.merge(df9,df11,on="物品编码",how='inner')运行结果:数据表纵向合并3顾名思义,数据表纵向合并就是将两个数据表在垂直方向进行连接,一般的应用场景就是将分离的若干个结构相同的数据表合并成一个数据表。我们一般是使用concat()方法。纵向合并纵向合并df13=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=13)df13运行结果:纵向合并df14=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=14)df14运行结果:纵向合并pd.concat([df13,df14])运行结果:logo通过上面的示例,我们可以发现纵向合并后的新数据表索引列编号是两个原数据表的编号,这样对于我们数据表的使用很不方便,我们需要对新数据表的索引进行重新设置。我们可以通过设置ignore_index参数,生成新的索引。重设索引重设索引pd.concat([df13,df14],ignore_index=True)运行结果:两个结构相同的数据表进行纵向合并后,可能会出现数据重复的情况,这种情况下,我们需要进行重复数据的清除。具体操作还是使用之前学过的drop_duplicates()方法。重复数据清除重复数据清除df15=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=15)df15运行结果:重复数据清除df16=pd.read_excel(r"C:\Users\Administrator\Desktop\数据连接.xlsx",sheet_name=16)df16运行结果:重复数据清除pd.concat([df15,df16],ignore_index=True).drop_duplicates()运行结果:感谢观看计算销售毛利财务数据分组财务数据运算数据透视表010203目录CONTENTS财务数据分组1数据分组一般是指把整个数据表分成若干组,然后对分组后的数据进行计算,或者根据业务需要,将计算后的数据再进行合并。在pandas库中对数据分组使用的语句是groupby(),分组时直接将列名传给groupby()。数据分组单列分组df=pd.read_excel(r"C:\Users\Administrator\Desktop\分组和运算.xlsx",sheet_name=1)df运行结果:单列分组df.groupby("产品类别")运行结果:<pandas.core.groupby.generic.DataFrameGroupByobjectat0x000002EDF3AB5E48>单列分组df.groupby("产品类别").count()运行结果:单列分组datagroupby(‘产品类别’)group多列分组df=pd.read_excel(r"C:\Users\Administrator\Desktop\分组和运算.xlsx",sheet_name=1)df.groupby(["客户ID","产品名称"]).sum()运行结果:财务数据运算2加减乘除是数学中基本的四则运算,在pandas模块中,数据表同样可以进行这种操作。数据四则运算加法运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=1)df运行结果:加法运算df["期间费用"]=df["销售费用"]+df["管理费用"]df["期间费用"]运行结果:减法运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=0)df运行结果:减法运算df["销售毛利"]=df["销售收入(元)"]-df["产品成本(元)"]df["销售毛利"]运行结果:乘法运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=2)df运行结果:乘法运算df["销售收入"]=df["销售价(元/个)"]*df["销售数量(个)"]df["销售收入"]运行结果:除法运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=2)df["销售价(元/个)"]/2运行结果:比较运算顾名思义,就是大于、等于、小于的运算比较,并且是数据列与数据列之间的运算比较。数据比较运算数据比较运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=3)df运行结果:数据比较运算df["成本价(元/个)"]>df["销售价(元/个)"]运行结果:求和运算求和运算是财务数据最基础的计算方式之一,我们可以使用sum()方法对数据进行汇总运算。求和运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=2)df运行结果:求和运算df["销售数量(个)"].sum()运行结果:528平均值计算同样也是财务数据非常重要的计算方式,使用的是mean()方法,需要注意的是,如果对整个数据表进行均值计算,得到的数据是每一列的均值。平均值运算平均值运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=1)df.mean()运行结果:最大(小)值运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=3)df.max()运行结果:最大(小)值运算df.min()运行结果:方差是用来衡量一组数据的离散程度(即数据波动幅度)的。我们在确定投资产品的风险和收益时,经常会用到方差。标准差是方差的平方根,同样也是表示数据的离散程度的。求方差使用的是var()语句,求标准差使用的是std()语句。方差、标准差运算方差、标准差运算f=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=3,converters={"单号":str})df.var(axis=1)运行结果:方差、标准差运算df.std(axis=1)运行结果:计数运算df=pd.read_excel(r"C:\Users\Administrator\Desktop\数据运算.xlsx",sheet_name=3)df.count()运行结果:计数运算df.count(axis=1)运行结果:数据透视表3数据透视表数据透视表(PivotTable)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标等。数据透视表df1=pd.read_excel(r"

温馨提示

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

评论

0/150

提交评论