Python数据分析必备工具——Pandas模块及其应用

news2024/11/25 20:35:49

Python数据分析必备工具——Pandas模块及其应用

  • 外部数据的读取
    • 文本文件的读取
      • 语法
      • 示例
    • 电子表格的读取
      • 语法
      • 示例
    • 数据库数据的读取与操作
      • 语法
  • 数据操作
    • 数据概述
      • 语法
    • 数据筛选
      • 语法
    • 数据清洗
      • 数据类型
        • 语法
        • 示例
      • 沉余数据
        • 语法
        • 示例
      • 异常值的识别与处理
      • 缺失值的识别与处理
        • 语法
        • 示例
    • 数据汇总
      • 透视表功能
        • 语法1
        • 示例1
        • 语法2
        • 示例2
      • 数据的合并
        • 语法
        • 示例
      • 数据的连接
        • 语法
        • 示例

外部数据的读取

文本文件的读取

语法

注意,它的参数还有很多,但是最重要的是此八个

pd.read_csv(filepath_or_buffer, sep=‘,', header=‘infer’, names=None, usecols=None,
skiprows=None, skipfooter=None, converters=None, encoding=None)
filepath_or_buffer:指定txt文件或csv文件所在的具体路径;
sep:指定原数据集中各字段之间的分隔符,默认为逗号”,”
header:是否需要将原数据集中的第一行作为表头,默认将第一行用作字段名称 None
names:如果原数据集中没有字段,可以通过该参数在数据读取时给数据框添加具体的表头
usecols:指定需要读取原数据集中的哪些变量名
skiprows:数据读取时,指定需要跳过原数据集开头的行数
skipfooter:数据读取时,指定需要跳过原数据集末尾的行数
converters:用于数据类型的转换(以字典的形式指定)
encoding:如果文件中含有中文,有时需要指定字符编码
thousands: 将千分位符号去掉

示例

Txt文档内容:
在这里插入图片描述

# 导入功能包
import pandas as pd

# 读取与处理
title = ['id','year','month','day','gender','occupation','income']
data01 = pd.read_csv(r'C:\Users\HP\Desktop\data\data_test01.txt',
            skiprows=2, sep=',', skipfooter=3, converters={'id':str},
                     encoding='utf-8', thousands='&',
                     header=None, names=title, usecols=['id','occupation','income'])
print(data01)

输出:
在这里插入图片描述

电子表格的读取

语法

pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0,
index_col=None, names=None,
na_values=None, thousands=None, convert_float=True)
io:指定电子表格的具体路径
sheetname:指定需要读取电子表格中的第几个Sheet,既可以传递整数也可以传递具体的Sheet名称
header:是否需要将数据集的第一行用作表头,默认为是需要的
skiprows:读取数据时,指定跳过的开始行数
skip_footer:读取数据时,指定跳过的末尾行数
index_col:指定哪些列用作数据框的行索引(标签)
na_values:指定原始数据中哪些特殊值代表了缺失值
thousands:指定原始数据集中的千分位符
convert_float:默认将所有的数值型字段转换为浮点型字段
converters:通过字典的形式,指定某些列需要转换的形式

示例

注意:openpyxl可能需要手动装一下(高版本的pandas没有)

# 导入功能包
import pandas as pd

# 读取与处理
title = ['id','product','color','size']
data2 = pd.read_excel(r'C:\Users\HP\Desktop\data\data_test02.xlsx',
              header=None, names= title, converters={'id':str})
print(data2)

输出:

在这里插入图片描述

数据库数据的读取与操作

语法

数据读取:

pymysql.connect(host=None, user=None, password=‘’,
database=None, port=0, charset=‘’)
host:指定需要访问的MySQL服务器(就是IP地址)
user:指定访问MySQL数据库的用户名
password:指定访问MySQL数据库的密码
database:指定访问MySQL数据库的具体库名
port:指定访问MySQL数据库的端口号
charset:指定读取MySQL数据库的字符集,如果数据库表中含有中文,一般可以尝试将该参数设置为“utf8”或“gbk”

pd.read_sql(sql,con)
pd.read_sql_table(table_name,con)
sql:指定SQL查询语句,将根据查询语句的逻辑返回对应的数据框
con:指定数据库与Python之间的连接器,即通过pymysql.connect函数或pymssql.connect构造的连
接器
table_name:指定数据库中某张表的名称,将根据表名称返回对应的数据框

对于更多的操作与运用了解,请见我的其他文章:
Mysql数据库基础:http://t.csdnimg.cn/A2VKy
MySQL操作并用Python进行连接:http://t.csdnimg.cn/DqP8E
Python 与 MySQL 数据库交互(含案例实战2:把金融数据存入数据库中):http://t.csdnimg.cn/tetKn

数据操作

数据概述

语法

df.head():查看数据前5组
df.shape:表示数据规模操作函数
df.columns:变量列表
df.dtypes:变量类型(object表示非数字类型或叫字符型)
df.describe:统计描述(默认对数值型数据做统计表述,如非缺失数据的个数、均值、标准值等)
df.describe(include=‘object’) 对字符型数据进行描述
df.columns:列名称

数据筛选

语法

df.column_name df[‘column_name’]:列的筛选
(如 list1.name或用list1[‘name’]、list1[[‘name’, ‘time’]]进行多个筛选)
df.loc[condition,:]:行的筛选
(如 list1.loc[list1.name == ‘小王’, :] 挑选name列中所以名字叫小王的行;
list1.loc[(list1.name == ‘小王’) & (list1.time>150), :]挑选name列中所以名字叫小王的且时间大于150的行)
df.loc[condition,:column_list]:行列的筛选
(如 list1.loc[(list1.name == ‘小王’) & (list1.time>150), [‘name’, ‘time’]]挑选name列中所以名字叫小王的且时间大于150的行,且只输出name和time列)

数据清洗

数据类型

语法

数据类型的更改(如int float str):
pd.to_datetime:更改为日期类型
df.column.astype:更改为设定数据类型

示例
import pandas as pd
sec_car = pd.read_csv(r'D:\pythonProject\data\sec_cars.csv')
sec_car.head()
# 数据类型
sec_car.dtypes

输出:
在这里插入图片描述
注意:要加上上面示例的第一段代码

# 将年月文本类型进行修改并将其进行更改
sec_car.Boarding_time = pd.to_datetime(sec_car.Boarding_time, format='%Y年%m月')
# 将价格修改为浮点型(首先要先将万去掉)
# 如果要对变量中的某一列的内容进行处理,要先str一下
sec_car.New_price = sec_car.New_price.str[:-1].astype(float)

输出:
在这里插入图片描述
在这里插入图片描述

沉余数据

语法

沉余数据的识别与处理:
df.duplicated:查看哪些行或者设定列是重复的,会返回true
df.drop_duplicates:删除重复内容的操作

示例
import pandas as pd
data= pd.read_excel(r'D:\pythonProject\data\data_test04.xlsx')
data.head()
# 检查数据是否存在冗余(也就是重复,改行完全重复)
data.duplicated()
# 只检查对于appname的是否存在重复
# data.duplicated(subset='appname')
# 删除重复内容的操作
data.drop_duplicates()
# 若inplace设置为true会将原表进行改变
# data.drop_duplicates(inplace = True) 

输出:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

异常值的识别与处理

Z得分法;分位数法;距离法等方法

Z得分法(要求数据大概为正态分布):
简单来说,就是统计学里面的,找n倍的标准差之内的数为符合,其余为异常。
在这里插入图片描述
分位数法(不为正太分布时我们用):
在其Q3+/-nIQR的之上或之下,判定为异常
在这里插入图片描述
Q1:25%,下四分位数;Q2:中位数(中间的那根线);Q3:75%,上四分位数;IQR=中间数据50%的幅度;n=1.5;

对于距离法,我们还没将K均值这个算法,所以在这里面不详细介绍,后面会详细说明。

缺失值的识别与处理

语法

df.isnull:返回一个同样的表格,查看哪些数据位置是空缺的(返回true此位置空缺和false)
df.isnull().any():返回哪个变量存在缺失(any表示多个or条件的综合)
df.isnull().sum():将能查看缺失值数量是多少
df.fillna:填充法(value=?)(但原始表格无变化,若要改变,需要添加inplace=True参数)
df.dropna:直接删除空缺数据(同样原始表格无变化,若要改变,需要添加inplace=True参数)

示例

在这里插入图片描述

# 我们可以利用除以行数来确定缺失比例是多少
data.isnull().sum() / data.shape[0]

输出:
在这里插入图片描述

# 利用指定数值替换mode是众数、mean是平均值、median是中位数
data.fillna(value={'gender': data.gender.mode()[0], 'age': data.age.mean(), 'income': data.income.median()})
# 若有相同的众数出现,他是按列表的形式排序的,我们取第一位也就是索引0
# 直接删除空缺数据
data.dropna()

输出:
在这里插入图片描述

数据汇总

在Excel中,是利用透视表进行汇总。
在SQL中,是分组统计。

透视表功能

语法1

pd.pivot_table(data, values=None, index=None, columns=None, aggfunc=‘mean’,
fill_value=None, margins=False, dropna=True, margins_name=‘All’)
data:指定需要构造透视表的数据集
values:指定需要拉入“数值”框的字段列表
index:指定需要拉入“行标签”框的字段列表
columns:指定需要拉入“列标签”框的字段列表
aggfunc:指定数值的统计函数,默认为统计均值,也可以指定numpy模块中的其他统计函数
fill_value:指定一个标量,用于填充缺失值
margins:bool类型参数,是否需要显示行或列的总计值,默认为False
dropna:bool类型参数,是否需要删除整列为缺失的字段,默认为True
margins_name:指定行或列的总计名称,默认为All

示例1

在这里插入图片描述

import pandas as pd
diamonds = pd.read_csv(r'D:\pythonProject\data\diamonds.csv')
# 查看表格
# diamonds.head()
# 查看不同颜色的钻石的平均价格
pd.pivot_table(diamonds, index = 'color', values='price', aggfunc='mean')

输出:
在这里插入图片描述

import pandas as pd
diamonds = pd.read_csv(r'D:\pythonProject\data\diamonds.csv')
# 查看表格
# diamonds.head()
# 查看不同颜色的钻石的平均价格
# pd.pivot_table(diamonds, index = 'color', values='price', aggfunc='mean')
# 查看不同颜色不同纯度的数量
pd.pivot_table(diamonds, index = 'color', columns='clarity', values='price', aggfunc='size')

输出:
在这里插入图片描述
同样我们可以使用对于SQL操作的方法:

语法2

groupby:用于汇总前,设定被分组的变量
aggregate:可基于groupby的结果做进一步的统计汇总
注意:在aggregate阶段,需以字典的形式传递参数,用于选择被统计的变量和对应的统计方法

示例2
import numpy as np
# 通过groupby方法,指定 颜色和切割 分组变量
grouped = diamonds.groupby(by = ['color','cut'])
# 对分组变量进行统计汇总(颜色为数量,重量求最小值,价格求平均值,宽度求最大值
result = grouped.aggregate({'color':np.size, 'carat':np.min, 'price':np.mean, 'table':np.max})
# 调整变量名的顺序
result = pd.DataFrame(result, columns=['color','carat','price','table'])
# 数据集重命名(若要改变原表格记得要加上inplace=True)
result.rename(columns={'color':'counts','carat':'min_weight','price':'avg_price','table':'max_face_width'},inplace=True)
result

输出:
在这里插入图片描述

数据的合并

语法

用于合并的函数:

pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False, keys=None)
objs:指定需要合并的对象,可以是序列、数据框或面板数据构成的列表
axis:指定数据合并的轴,默认为0,表示合并多个数据的行,如果为1,就表示合并多个数据的列
join:指定合并的方式,默认为outer,表示合并所有数据,如果改为inner,表示合并公共部分的数据
join_axes:合并数据后,指定保留的数据轴
ignore_index:bool类型的参数,表示是否忽略原数据集的索引,默认为False,如果设为True,就表示
忽略原索引并生成新索引
keys:为合并后的数据添加新索引,用于区分各个数据部分

示例

列合并:

import pandas as pd
# 构造数据集df1和df2
df1 = pd.DataFrame({'name':['张三','李四','王二'], 'age':[21,25,22], 'gender':['男','女','男']})
df2 = pd.DataFrame({'name':['丁一','赵五'], 'age':[23,22], 'gender':['女','女']})
print(df1)
print(df2)
# 数据集的纵向合并
pd.concat([df1,df2] , keys = ['df1','df2']).reset_index()

输出:
在这里插入图片描述

import pandas as pd
# 构造数据集df1和df2
df1 = pd.DataFrame({'name':['张三','李四','王二'], 'age':[21,25,22], 'gender':['男','女','男']})
df2 = pd.DataFrame({'name':['丁一','赵五'], 'age':[23,22], 'gender':['女','女']})
# print(df1)
# print(df2)
# 数据集的纵向合并
# pd.concat([df1,df2] , keys = ['df1','df2']).reset_index()
# 合并把没用的列删除,需要添加操作drop
pd.concat([df1,df2] , keys = ['df1','df2']).reset_index().drop(labels='level_1', axis=1)

输出:
在这里插入图片描述

import pandas as pd
# 构造数据集df1和df2
df1 = pd.DataFrame({'name':['张三','李四','王二'], 'age':[21,25,22], 'gender':['男','女','男']})
df2 = pd.DataFrame({'name':['丁一','赵五'], 'age':[23,22], 'gender':['女','女']})
# print(df1)
# print(df2)
# 数据集的纵向合并
# pd.concat([df1,df2] , keys = ['df1','df2']).reset_index()
# 合并把没用的列删除,需要添加操作drop
# pd.concat([df1,df2] , keys = ['df1','df2']).reset_index().drop(labels='level_1', axis=1)
# 将变量名进行修正 rename,columns指的是列
pd.concat([df1,df2] , keys = ['df1','df2']).reset_index().drop(labels='level_1', axis=1).rename(columns={'level_0':'class'})

输出:
在这里插入图片描述

行合并:

import pandas as pd
# 构造数据集df1和df2
df1 = pd.DataFrame({'name':['张三','李四','王二'], 'age':[21,25,22], 'gender':['男','女','男']})
# 如果df2数据集中的“姓名变量为Name”
df2 = pd.DataFrame({'Name':['丁一','赵五'], 'age':[23,22], 'gender':['女','女']})
print(df2)
# 数据集的纵向合并(相同变量名则直接合并,没有的话会创建新的)
# concat行合并,数据源的变量名称完全相同(变量名顺序没要求)
pd.concat([df1,df2])

输出:
在这里插入图片描述

数据的连接

在这里插入图片描述

语法

pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘_x’, ‘_y’))
left:指定需要连接的主
right:指定需要连接的辅表
how:指定连接方式,默认为inner内连,还有其他选项,如左连left、右连right和外连outer
on:指定连接两张表的共同字段
left_on:指定主表中需要连接的共同字段
right_on:指定辅表中需要连接的共同字段
left_index:bool类型参数,是否将主表中的行索引用作表连接的共同字段,默认为False
right_index:bool类型参数,是否将辅表中的行索引用作表连接的共同字段,默认为False
sort:bool类型参数,是否对连接后的数据按照共同字段排序,默认为False
suffixes:如果数据连接的结果中存在重叠的变量名,则使用各自的前缀进行区分

示例
# 构造数据集
df3 = pd.DataFrame({'id':[1,2,3,4,5], 'name':['张三','李四','王二','丁一','赵五'], 'age':[27,24,25,23,25],'gender':['男','男','男','女','女']})
df4 = pd.DataFrame({'Id':[1,2,2,4,4,4,5], 'score':[83,81,87,75,86,74,88], 'kemu':['科目1','科目1','科目2','科目1','科目2','科目3','科目1']})
df5 = pd.DataFrame({'id':[1,3,5], 'name':['张三','王二','赵五'], 'income':[13500,18000,15000]})
print(df3)
print(df4)
print(df5)

输出:
在这里插入图片描述

# 三表的数据连接,先两两相连
 
# 首先df3和df4连接
merge1 = pd.merge(left = df3, right = df4, how = 'left', left_on='id', right_on='Id')
print(merge1)

# 再将连接结果与df5连接
merge2 = pd.merge(left = merge1, right = df5, how = 'left')
print(merge2)

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1554550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP图床程序优化版:图片外链服务、图床API服务、图片CDN加速与破解防盗链

图片免费上传 支持本地储存、FTP储存、第三方云储存(阿里云 OSS、腾讯云 COS、七牛云等)。 图片外链加速 一键转换第三方网站的图片外链地址为图床可分享的图片地址(支持CDN)。 图片解析服务 直接将第三方外链图片地址显示为…

BSV区块链的应用开发前景——通过标准化来促进创新

​​发表时间:2024年3月5日 近年来区块链领域的发展日新月异,各种全新的技术和方法论正在迅猛涌现。在这个瞬息万变的环境之中,标准化不仅仅会为开发者们带来便利,同时也促进了应用之间的互操作性,并且推动着生态系统的…

【机器学习300问】56、什么是自编码器?

一、什么是自编码器? 自编码器(Autoencoder,AE)本质是一种特殊的神经网络架构。主要用于无监督学习和特征学习任务。它的目标是通过编码然后解码的过程,学会重构其输入数据,试图还原其原始输入的。 当时我学…

【探索Linux】—— 强大的命令行工具 P.31(守护进程)

阅读导航 引言一、守护进程简介1. 概念2. 特点 二、用C创建守护进程⭕代码✅主要步骤 温馨提示 引言 当谈到计算机系统中运行的特殊进程时,守护进程(daemon)无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程,守…

FreeRTOS从代码层面进行原理分析(4 移植)

FreeRTOS从代码层面进行原理分析(4 移植) 从前 3 篇博客中我们已经搞清楚了最开始对 FreeRTOS 有疑问的前 2 个问题。 1. FreeRTOS 是如何建立任务的呢? 2. FreeRTOS 是调度和切换任务的呢? 3. FreeRTOS 是如何保证实时性呢? 以下就是前三…

LeetCode:300最长递增子序列 C语言

300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

大话设计模式之迪米特法则

迪米特法则,也称为最少知识原则(Law of Demeter),是面向对象设计中的一个重要原则,其核心思想是降低耦合度、减少对象之间的依赖关系,从而使系统更加灵活、易于维护和扩展。 根据迪米特法则,一…

Multisim14.0破解安装教程

Multisim14.0中文破解版是一款相当优秀的专业化SPICE仿真标准环境,Multisim14.0中文版功能强悍,为用户提供了所见即所得的设计环境、互动式的仿真界面、动态显示元件、具有3D效果的仿真电路、虚拟仪表、分析功能与图形显示窗口等等。Multisim破解版操作简…

Linux-1.常见指令以及权限理解

目录 本节目标 使用 XShell 远程登录 Linux 关于 Linux 桌面 下载安装 XShell 查看 Linux 主机 ip 使用 XShell 登陆主机 XShell 下的复制粘贴 Linux下基本指令 登录Linux服务器 新建多用户 全屏 1.快速认识5~6个命令 2.详细谈论课件的所有指令 01. ls 指令 02…

Linux 环境安装Nginx—源码和Dokcer两种安装方式

一、源代码编译安装Nginx 1.下载最新nginx源码 以nginx-1.25.3.tar.gz为例: 可以使用命令(联网):curl -O http://nginx.org/download/nginx-1.25.3.tar.gz或在官网下载.tar.gz 2.解压缩 tar -zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3/ 3.安装依赖…

动态菜单设计

查询当前用户下的菜单权限 思路:根据用户id 左关联表 查询出对应的菜单选项 查询SQL select distinct-- 菜单表 去除重复记录sys_menu.id,sys_menu.parentId, sys_menu.name from -- 权限表sys_menu-- 角色与权限表 菜单表id 角色菜单表的菜单id left j…

数据分析之Power BI

POWER QUERY 获取清洗 POWER PIVOT建模分析 如何加载power pivot 文件-选项-加载项-com加载项-转到 POWER VIEW 可视呈现 如何加载power view 文件-选项-自定义功能区-不在功能区中的命令-新建组-power view-添加-确定 POWER MAP可视地图

Redis 6.0.8版本下载

简介:Java领域优质创作者楠木 分享Java项目、简历模板、学习资料、面试题库 想必大家在下载redis之前已经逛了很多教程了,可能不尽如意,找不到自己的想要的版本。既然刷到了我的这条博客,说明你是幸运的! Redis6.0.8的…

k8s1.28.8版本配置prometheus监控告警

文章目录 官方架构图组件的具体介绍kube-prometheus包含的组件简介:文件存储路径: 结构分析官网自带的一些规则自己总结流程 1-创建规则磁盘使用率报警规则 详解上面rule流程Alertmanagerg查看 2-报警接收器2.1-邮件报警修改Alertmanager配置查看现有的s…

【深耕 Python】Data Science with Python 数据科学(2)jupyter-lab和numpy数组

关于数据科学环境的建立,可以参考我的博客:【深耕 Python】Data Science with Python 数据科学(1)环境搭建 Jupyter代码片段1:简单数组的定义和排序 import numpy as np np.array([1, 2, 3]) a np.array([9, 6, 2, …

flume配置文件后不能跟注释!!

先总结:Flume配置文件后面,不能跟注释,可以单起一行写注释 报错代码: [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…

AI的“换脸“魔术,究竟是弊大于利还是利大于弊?

公众号:【可乐前端】,每天3分钟学习一个优秀的开源项目,分享web面试与实战知识,也有全栈交流学习摸鱼群,期待您的关注! 每天3分钟开源 hi,这里是每天3分钟开源,很高兴又跟大家见面了&#xff0…

Rsyslog 日志集中管理实验

1.使用 进行日志集中管理 C/S 架构&#xff1a;客户端将其日志上传到服务器端&#xff0c;通过对服务器端日志的查询&#xff0c;来实现对其他客户端的日志进行集中管理 2.两台机器&#xff1a; &#xff08;server&#xff09;host-5(192.168.1.2)<------------>(192…

【51单片机入门记录】Onewire单总线协议 温度传感器DS18B20概述

一、温度传感器DS18B20概述 &#xff08;1&#xff09;数字化温度传感器 美国DALLAS半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点&#xff0c;使用户可轻松地组建传感器网络&#xff0c;为测量系统的构建…

Redis与数据库的一致性

Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时&#xff0c;经常会遇到Redis与数据库的数据一致性问题。简单来说&#xff0c;就是同一份数据同时存在于Redis和数据库&#xff0c;如何在数据更新的时候&#xff0c;保证两边数据的一致性。首先&#…