《利用python进行数据分析》,从零开始学Python数据分析与挖掘
这段时间,我在学习Excel和Python。有一本《Excel数据分析入门》《谁说菜鸟不会数据分析(入门篇)》,内容详实,简明易懂,重在培养分析思维而不仅仅是告知方法。在学习Python的过程中萌发了用Python处理《谁说菜鸟不会数据分析(入门篇)》中Excel文件的想法,从而提高Python数据分析的使用,了解数据处理的方式。因为刚开始学Python和Excel,可能Python有些问题太复杂,不够简洁,所以就试试。
1.重复数据处理有时候数据中会出现重复行,会干扰数据分析,所以需要对重复数据进行处理。
为了消除数据中的重复数据,DataFrame中主要使用duplicated方法和drop_duplicates方法:
-duplicated方法返回一个布尔序列,用于确定每一行是否重复。如果是复制,那就是真的;否则就是假的。
-drop_duplicates直接返回删除了重复行的数据帧。
默认的drop_duplicates方法将判断所有列。只有当所有列的值都重复时,才会被视为重复行。如果只需要根据一列或几列判断重复。您可以添加列名列表:drop _ duplicates ([k1])或drop _ duplicates ([k1 , k2])。删除的重复值时,您可以选择是保留第一项还是最后一项。添加keep= last 将保留最后一个重复值,keep= first 将保留第一个重复值。
熊猫的ExcelFile类或pandas.read_excel函数支持读取Excel 2003(或更高版本)中存储的表格数据。这两个工具分别使用扩展包xlrd和openpyxl来读取XLS和XLSX文件。你可以用pip或conda安装它们。
要使用ExcelFile,请通过传递xls或xlsx路径创建一个实例,然后使用存储在表单中的数据通过read_excel读取DataFrame。
将panda导入为PD xlsx=PD . excel file( e:/docs/python/excel _ data/ch04/4.2/de duplication . xls )#使用/作为此处的路径,否则使用右斜杠 \将报告OSError无效参数error frame=pd.read _ excel (xlsx, sheet1 )。如果要读取一个文件中的多个表单,创建ExcelFile会更快,但也可以将文件名传递给pandas.read_excel:
1=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.2/duplication . xls , sheet1) frame1
数据处理使用DataFrame的drop_duplicates()删除重复数据。
Frame_=frame . drop _ duplicates(keep= last )# keep= last ,保留最后一个重复值,keep=first 保留第一个重复值frame _
将数据保存为Excel文件如果要将panda数据写入Excel格式,必须先创建一个ExcelWriter,然后使用panda对象的to_excel方法来
将数据写入其中:
writer=PD . excel writer( e:/docs/python/excel _ data/ch04/4.2/duplicate data processing _ post-processing . xls )frame _。to_excel (writer, sheet1) writer.save()您还可以将文件的路径传递给to_excel,而不是使用ExcelWriter。
框架_。to _ excel( e:/docs/python/excel _ data/ch04/4.2/重复数据处理_后处理。xls) 2。检查数据逻辑错误。根据数据来源、数据属性等判断逻辑错误。如负年龄等。
这里的例子是你需要在选择题中选择3项,0表示不选,0表示不选,所以你需要判断每一行数据中非零项的个数是否等于3。
因为原始xls文件有合并的单元格,首先手动删除它们,只留下标题列ABCDEFG和表格内容。
2=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.2/check data logic error . xls , sheet 1 )frame 2 _=frame 2 . copy()frame 2 _
DataFrame的loc和iloc方法可以选择行进行计算和判断。loc和iloc分别由index和integer index选择。ABCDEFG7题只能选3项。用不等于0的值作为短判断,或多或少是错误的。
# for循环记住for,if和else语句后面是:for I in range(len(frame 2 _)):if(frame 2 _。loc [I]!=0).sum()==3: frame2_。loc[i, check]= correct else: frame2_。loc[i, check]= error frame2_
3.字段排序(带分隔符)在数据源数据中,有时需要从某一列数据中提取信息(如从身份证号中提取出生日期)或对数据进行分割(如类似2011年1月5日的日期,将年月日信息提取到单独的列中)。根据数据的不同,分为两种情况,可以通过分离提取字符串来解决:
1.要分类的信息之间有特殊的分隔符,如逗号、空格等。可以用拆分法直接拆分;
2.没有特殊分隔符时,索引字符串,如x= spam可以用x[0],x[-1],x[1:3]等来提取信息。
在此示例中,英文名称以空格作为分隔符进行分段。
Excel文件相当随机,只添加了数据内容,没有列名。请先手动添加列名name。
框架3=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.3/field-sorting . xls , sheet1 )框架3
首先提取需要排序的列,用split()排序,其中分隔符是空格。
帧3_=pd。data frame((x . split( )for x in frame 3 . name),index=frame3.index,columns=[A , B])frame3_
4.字段排序(无特定分隔符)frame 4=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.3/data-extraction . xls , sheet1) frame4
字段本质上是一个字符串,固定位置可以通过index直接选择。
4 [姓氏]=PD . series((x[0])for x in frame 4[名字])frame4
5.excel中的字段匹配,vlookup是字段匹配搜索的神器,索引和匹配功能几乎无敌。在数据框中,合并是一种合并两个数据框的方法。可以用on= column name 选择要匹配的列,还可以选择交集、归并、左归并、右归并,非常强大。
在本例中,雇员职位表包含雇员姓名、工号、职称等信息。但是员工个人信息表缺少职务信息,所以需要将员工职位表中的职务信息添加到员工个人信息表中。选择要匹配的工单编号列。
Frame 51=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.3//字符匹配/员工职位表. xlsx , sheet1) Frame 51
frame 52=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.3//字符匹配/员工个人信息表单(销售部门)。xlsx , Sheet1 )框架52
需要从《员工职位表》到《员工个人信息表》提取‘工作’信息,相当于合并两个数据帧。连接关键字是“作业编号”,必填字段是“作业”。
Pd.merge(frame52,frame51[[工作编号,作业]],on=工作编号)
6.简单计算本质上相当于在DataFrame上加一列,由前一列的数据生成,两列可以直接相乘。
在此示例中,销售额是通过以下公式计算的:销售额=销售数量*单价
frame 6=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.3//simple calculation . xls , sheet1) frame6
6 [销售]=框架6[销售数量]*框架6[单价]框架6
#这里已经计算了销售额,因为表中还有合计项。顺便联系一下iloc frame6.iloc [5,1:]=frame6.iloc [0: 5,1:]的使用方法。sum () frame6。
7.函数计算直接使用mean和sum函数计算平均值和总和。因为是计算每一行的值,所以需要设置axis=1。
frame 7=PD . read _ excel( e:/docs/python/excel _ data/ch04/4.3//function-calculation . xls , sheet1) frame7
Frame7[季度平均值]=frame7[[第一季度,第二季度,第三季度,第四季度]。平均值(轴=1)框架7 [总销售额]=框架7[[第一季度,第二季度,第三季度,]
本文涉及的Jupyter的Excel数据文件和ipynb文件放在:
https://pan.baidu.com/s/1_ZfhpUTRoFEEglbqF7AhZA密码:586r
055-79000的书需要自己解决。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。