Pandas 是一个专门用于数据分析的开源python库
Pandas是基于NumPy开发的,它可以与其他第三方科学计算库完美集成
Pandas 库最初是由Wes McKinney(麦金尼,Pandas 项目的创始人)一人于2008年开发设计的。2012年,Wes McKinney的同事Sien Chang加入开发工作,他们一起开发了用于数据分析的著名开源的PYthon库——Pandas
Pandas 是数据分析的三大剑客之一,是python的核心数据分析库,它提供了快速、准确的数据结构,能够简单、直观、快速地处理各种类型的数据:
与SQL或Excel表格类似的数据
有序和无序(无固定频率)的时间序列数据
带行列标签的矩阵数据
任意其它形式的观测、统计数据集
处理浮点与肺腑点数据里的缺失数据
大小可变,例如插入或删除DataFrame等多维对象的列
自动、显示的数据对齐,显示地将对象与——组标签对齐
强大、灵活的分组统计功能,即数据聚合、数据转换
灵活的合并、连接、重塑、透视数据集
成熟的导入导出工具
时间序列
导入Excel文件
导入CSV文件
导入txt文件
导入HTML网页
导出为Excel文件
import pandas as pd #导入pandas模块 #导入Excel文件 df = pd.read_excel('././././...xlsx')#添加导入路径 print(df.head(3))#读取前三条数据
import pandas as pd #导入pandas模块 #导入CSV文件,并指定编码格式 df = pd.read_csv('././././...csv,encoding ='UTF-8') print(df.head())#输出前五条数据
import pandas as pd #导入pandas模块 #导入txt文件,并指定分隔符编码格式 df = pd.read_csv('././././...txt,sep ='\t' ,encoding ='UTF-8') print(df.head())#输出前五条数据
示例:导入HTML网页的"北京空气质量指数"数据
import pandas as pd #导入pandas模块 #导入HTML网页,经观察所需表格是网页中的第一个表格,故为[0] df = pd.read_html('https://www.air-level.com/air/wuhai/',encoding ='UTF-8')[0] print(df.head())#输出前五条数据
示例:将数据导出为Excel文件
创建一个DataFrame对象,将DataFrame对象存入 Excel文件,程序代码如雨下:
import pandas as pd #导入pandas模块 df = pd.DataFrame({ '编号:'['mr1001','mr002','mr003'], '语文:'['100','105','109'], '数学:'['105','88','120'], '英语:'['99','115','130']}),#创建DataFrame对象 df.to_excel('./././.....xlsx')#将数据导出为Excel文件
DataFrame对象是一个二维表数据结构,即有行列是数据组成的表格
语法
创建DataFrame对象主要使用pandas 模块的DataFrame方法,语法如下:
pandas.DataFrame(data = None,columns = None,dtype = None,copy = False)
数据
以员工薪资构成为例,其包含基本薪资、绩效薪资和补贴、数据如下:
姓名 基本薪资 绩效薪资 补贴 Marry 2500 5800 500 LiLi 2500 7800 650 Cendy 2500 10500 200
示例:结合二维数组创建DataFrame对象
根据员工薪资结构数据,结合二维数组创建DataFrame对象
import pandas as pd #导入pandas模块 #解决数据输出时列名不对齐的问题 pd.set_option('display.unicode.east_asian_width'True) salary = [[2500, 5800, 500],[2500, 7800, 650],[2500 ,10500, 200]]#创建二维数组 index_name = ['Marry', 'LiLi', 'Cendy']#设置行索引 #创建DataFrame对象 df = pd.DataFrame(data = salary.index = index_name,columns_name) print(df)
数据抽取
数据增加
数据修改
数据删除
缺失值处理
异常值处理
解析
DataFrame对象中的loc属性和iloc属性都可以抽取数据,区别如下:
loc属性:以行名(index)和列名(columns)作为参数,当只有一个参数是,默认是行名,即抽取整行数据,包括所有列,如df.loc[‘A’]
iloc属性:以行和列位置索引(即0,1,2...)作为参数,0表示有第一行,1表示有第二行,
以此类推。当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列,如抽取第一行数据,如df.iloc[0]
需求
使用loc属性和iloc属性分别抽取‘Marry’数据,即抽取一行数据
姓名 基本薪资 绩效薪资 补贴 Marry 2500 5800 500 LiLi 2500 7800 650 Cendy 2500 10500 200
import pandas as pd #导入pandas模块 pd.set_option('display.unicode.east_asian_width'True) salary = [[2500, 5800, 500],[2500, 7800, 650],[2500 ,10500, 200]]#创建二维数组 index_name = ['Marry', 'LiLi', 'Cendy']#设置行索引 column_name = [['基本薪资'], ['绩效薪资'], ['补贴']] df = pd.DataFrame(data = salary.index = index_name,columns_name) print(df.loc['Marry'])#以行名作为参数,抽取'Marry'数据 print(df.iloc['0'])#以行索引作为参数,抽取'Marry'数据
姓名 基本薪资 绩效薪资 补贴 Marry 2500 5800 500 LiLi 2500 7800 650 Cendy 2500 10500 200
需求:增加一列“奖金”
方式1:直接DataFrame对象赋值
df['奖金'] = [1000, 800, 500]
import pandas as pd #导入pandas模块 pd.set_option('display.unicode.east_asian_width'True) salary = [[2500, 5800, 500],[2500, 7800, 650],[2500 ,10500, 200]]#创建二维数组 index_name = ['Marry', 'LiLi', 'Cendy']#设置行索引 column_name = [['基本薪资'], ['绩效薪资'], ['补贴']] df = pd.DataFrame(data = salary.index = index_name,columns df['奖金'] = [1000, 800, 500] print(df)
方式2:使用Loc属性在DataFrame对象的最后增加一列
df.loc[:,'奖金'] = [1000, 800, 500]
import pandas as pd #导入pandas模块 pd.set_option('display.unicode.east_asian_width'True) salary = [[2500, 5800, 500],[2500, 7800, 650],[2500 ,10500, 200]]#创建二维数组 index_name = ['Marry', 'LiLi', 'Cendy']#设置行索引 column_name = [['基本薪资'], ['绩效薪资'], ['补']] df = pd.DataFrame(data = salary.index = index_name,columns df.loc[:,'奖金'] = [1000, 800, 500] print(df)
方式3:在指定位置插入一列
df.inset = (3,'奖金'[1000, 800, 500])
import pandas as pd #导入pandas模块 pd.set_option('display.unicode.east_asian_width'True) salary = [[2500, 5800, 500],[2500, 7800, 650],[2500 ,10500, 200]]#创建二维数组 index_name = ['Marry', 'LiLi', 'Cendy']#设置行索引 column_name = [['基本薪资'], ['绩效薪资'], ['补贴']] df = pd.DataFrame(data = salary.index = index_name,columns df.inset = (3,'奖金'[1000, 800, 500]) print(df)
姓名 基本薪资 绩效薪资 补贴 Marry 2500 5800 500 LiLi 2500 7800 650 Cendy 2500 10500 200
需求:增加一行和多行
方式1:使用Loc属性在DataFrame对象的最后增加一行“Alice”数据
df.loc["Alice"] = [2500, 9500, 150]
import pandas as pd #导入pandas模块 pd.set_option('display.unicode.east_asian_width'True) salary = [[2500, 5800, 500],[2500, 7800, 650],[2500 ,10500, 200]]#创建二维数组 index_name = ['Marry', 'LiLi', 'Cendy']#设置行索引 column_name = [['基本薪资'], ['绩效薪资'], ['补']] df = pd.DataFrame(data = salary.index = index_name,columns df.loc["Alice"] = [2500, 9500, 150] print(df)
方式2:增加“Alice" "Robby" " John" 多行数据,主要使用append方法实现
de_insert = pd.DataFrame({ #创建DataFrame对象,即创建数据 "基本薪资:"[2500, 3500, 4000], "绩效薪资:"[9500, 8200, 5800], "补贴:"[150 ,280, 300]}, index = ([“Alice","Robby"," John"]) #设置行索引,即员工姓名 print(df.append(df_insert))
方式一:columns属性修改列标题
#修改单个列标题 df.columns = ["基本薪资","绩效薪资","补贴薪资"]
方式二:rename函数修改多个学科的列名
#字典类型,键表示旧名称,值表示新名称 new_name = ["基本薪资":'basic-salary',"绩效薪资":'kpi-salary',"补贴":'补贴薪资'] df.rename(columns = new_name, inplace = True)#在原DataFrame对象上修改列索引 print(df)#输出DataFrame对象
方式三:使用iloc属性修改数据
通过iloc属性指定行和列位置实现修改数据,关键代码如下:
df.iloc[0] = [3200, 11000, 120] #修改行数据 df.iloc[:,0] = [2800, 3500, 4600]#修改整列数据 df.iloc[1,2] = 370 #修改某一处数据
姓名 基本薪资 绩效薪资 补贴 Marry 2500 5800 500 LiLi 2500 7800 650 Cendy 2500 10500 200
示例:删除指定列的数据
删除数据主要使用DataFrame对象中的drop函数
df.drop(columns) = ("补贴",inplace = True)#删除columns为“补贴”的 列
示例:删除指定行的数据
df.drop(index) = ('index' = "Marry",inplace = True)#删除index为“Marry”的行
编号 | 姓名 | 基本薪资 | 绩效薪资 | 补贴 |
---|---|---|---|---|
0 | Marry | 2500 | 5800 | 200 |
1 | LiLi | 2800 | 6400 | |
2 | Cendy | 4200 | 5000 | 300 |
3 | Zhang | 350000 | 7800 | 650 |
4 | Wang | 2500 | 11000 | 200 |
缺失值指的是由于某种原因导致数据为空,这种情况一般有三种处理方式:
一是不处理
二是删除
三是填充或替换
首先需要找到缺失值,主要使用DataFrame对象中的info函数
import pandas as pd #导入pandas模块 pd.set_option('display.unicode.east_asian_width'True) #导入Excel文件 df = pf.read_excel(r'./././...xlsx') print(df)#输出DataFrame对象 print(df.info())#查看缺失值
使用dropna函数删除函数含有缺失值的行
print(df.dropna())#只要有缺失值就删除
DataFrame对象中的fillna函数可以实现填充缺失值
#用前一个非缺失值去填充缺失值 df['补贴'] = df['补贴'].fillna(method ='ffill')
在数据分析中,异常值是指超出后低于正常范围的值,如年龄为负数,身高大于3米等类似数据,其处理方式包括以下几种:
删除含有异常值的记录
将异常值视为缺失值,按照缺失值的处理方法来处理
用平均值来修改异常值
对异常值不处理
编号 | 姓名 | 基本薪资 | 绩效薪资 | 补贴 |
---|---|---|---|---|
0 | Marry | 2500 | 5800 | 200 |
1 | LiLi | 2800 | 6400 | |
2 | Cendy | 4200 | 5000 | 300 |
3 | Zhang | 350000 | 7800 | 650 |
4 | Wang | 2500 | 11000 | 200 |