第三方扩展库---Pandas

Pandas

1.概述

Pandas 是一个专门用于数据分析的开源python库

Pandas是基于NumPy开发的,它可以与其他第三方科学计算库完美集成

Pandas 库最初是由Wes McKinney(麦金尼,Pandas 项目的创始人)一人于2008年开发设计的。2012年,Wes McKinney的同事Sien Chang加入开发工作,他们一起开发了用于数据分析的著名开源的PYthon库——Pandas

Pandas 是数据分析的三大剑客之一,是python的核心数据分析库,它提供了快速、准确的数据结构,能够简单、直观、快速地处理各种类型的数据:

  • 与SQL或Excel表格类似的数据

  • 有序和无序(无固定频率)的时间序列数据

  • 带行列标签的矩阵数据

  • 任意其它形式的观测、统计数据集

2.优势

  • 处理浮点与肺腑点数据里的缺失数据

  • 大小可变,例如插入或删除DataFrame等多维对象的列

  • 自动、显示的数据对齐,显示地将对象与——组标签对齐

  • 强大、灵活的分组统计功能,即数据聚合、数据转换

  • 灵活的合并、连接、重塑、透视数据集

  • 成熟的导入导出工具

  • 时间序列

外部数据的导入导出

  • 导入Excel文件

  • 导入CSV文件

  • 导入txt文件

  • 导入HTML网页

  • 导出为Excel文件

导入Excel文件

import pandas as pd #导入pandas模块
#导入Excel文件
df = pd.read_excel('././././...xlsx')#添加导入路径
print(df.head(3))#读取前三条数据

导入CSV文件

import pandas as pd #导入pandas模块
#导入CSV文件,并指定编码格式
df = pd.read_csv('././././...csv,encoding ='UTF-8')
print(df.head())#输出前五条数据

导入txt文件

import pandas as pd #导入pandas模块
#导入txt文件,并指定分隔符编码格式
df = pd.read_csv('././././...txt,sep ='\t' ,encoding ='UTF-8')
print(df.head())#输出前五条数据

导入HTML网页

示例:导入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文件

示例:将数据导出为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对象是一个二维表数据结构,即有行列是数据组成的表格

语法

创建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

你可能感兴趣的:(pandas,python,数据分析)