【Pandas】数据分析入门
文章目录
- 前言
- 一、Pandas简介
- 1.1 什么是Pandas
- 1.2 Pandas应用
- 二、Series结构
- 2.1 Series简介
- 2.2 基本使用
- 三、DataFrame结构
- 3.1 DataFrame简介
- 3.2 基本使用
- 四、Pandas-CSV
- 4.1 CSV简介
- 4.2 读取CSV文件
- 4.3 数据处理
- 五、数据清洗
- 5.1 数据清洗的方法
- 5.2 清洗案例
- 总结
前言
大家好,我是初心,很高兴再次和大家见面。这篇文章主要讲解Python数据分析三剑客之一——Pandas的数据分析运算,收录于初心的《大数据》专栏。
🏠 个人主页:初心%个人主页
🧑 个人简介:大家好,我是初心,一名正在努力的双非二本院校计算机专业学生
🍺 座右铭:理想主义的花,终究会盛开在浪漫主义的土壤里!🍺🍺🍺
💕 欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信😘
一、Pandas简介
1.1 什么是Pandas
Pandas 是基于NumPy 的一种工具,该工具是为了 解决数据分析任务而创建的
。官方对它的解释是 “强大的Python数据分析支持库”
,Pandas 名字衍生自术语 “panel data”(面板数据)和 “Python data analysis”(Python 数据分析)。Pandas官网
Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
1.2 Pandas应用
Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据)
,这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。
Series 是一种类似于 一维数组
的对象,它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
DataFrame 是一个 表格型
的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典。
二、Series结构
2.1 Series简介
Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
Series 由索引(index)和列组成,构造函数如下:
pandas.Series( data, index, dtype, name, copy)
参数 | 说明 |
---|---|
data | 一组数据(ndarray 类型) |
index | 数据索引标签,如果不指定,默认从 0 开始 |
dtype | 数据类型,默认会自己判断 |
name | 设置名称 |
copy | 拷贝数据,默认为 False |
Series简单示例代码和输出结果如下:
import pandas as pd# 数据
a = [1,2,3]
# Series对象,会将列表数据转化为一列
myvar = pd.Series(a)
print(myvar)
2.2 基本使用
- 根据索引值读取数据
# 下标
print(myvar[0])
# 切片
print(myvar[:3])
- 设置索引
myvar = pd.Series(a,index=["x","y","z"])
- 使用字典创建Series对象
sites = {1: 'Google', 2: 'Edge', 3: 'Firefox'}
myvar = pd.Series(sites)
print(myvar)
- 设置Series名称
myvar = pd.Series(sites,name='Pandas Test')
三、DataFrame结构
3.1 DataFrame简介
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)
。
DataFrame 的 每一行数据
都可以看成一个 Series 结构,只不过,DataFrame 为这些行中每个数据值增加了一个列标签。因此 DataFrame 其实是从 Series 的基础上演变而来。
可以这么说,掌握了 DataFrame 的用法,你就拥有了学习数据分析的基本能力。
3.2 基本使用
DataFrame 构造方法如下:
pandas.DataFrame( data, index, columns, dtype, copy)
参数的含义和 Series 类似,column 表示列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
DataFrame 简单示例代码和输出结果如下:
import pandas as pd# 数据
data = [['apple',10],['banana',12],['orange',31]]
# 指定列索引
df = pd.DataFrame(data,columns=['type','number'],dtype=float)
print(df)
- 使用 ndarrays 创建-键是列索引,值是数据
import pandas as pd# ndarrays 数据
data = {'type':['apple','banana','orange'],'age':[10,12,31]}
# 创建dataframe对象
df = pd.DataFrame(data)
print(df)
- 字典列表创建-一个字典是一行
# 字典列表
data1 = [{'a':1,'b':2},{'a':10,'b':20,'c':30}]
df = pd.DataFrame(data1)
print(df)
- loc 属性返回行
data = {'calories': [420, 380, 390],'duration': [50, 40, 45]
}
df = pd.DataFrame(data)
# 返回第一行
print(df.loc[1])
print('*'*20)
# 切片,返回前2行
print(df.loc[:1])
四、Pandas-CSV
4.1 CSV简介
CSV(Comma-Separated Values, 逗号分隔值
,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
4.2 读取CSV文件
在 Pandas 中用于读取文本的函数有两个,分别是: read_csv() 和 read_table() ,它们能够 自动地将表格数据转换为 DataFrame 对象
。其中 read_csv 的语法格式如下:
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)
这里要用到一个CSV文件(nba.csv),放在文末扫码可以领取。
read_csv() 函数简单示例代码和输出结果如下:
import pandas as pddf = pd.read_csv('nba.csv')
print(df)
- 返回数据
打印 dataframe 对象默认返回数据的前后5行,中间部分以点代替,如上图所示。要返回全部数据需要使用 to_string()函数。
- 存储 csv 文件
使用 to_csv() 方法将 dataframe 对象存储为 csv 文件。
import pandas as pddf = pd.read_csv('nba.csv')
print(df.head(3))
# 存储前三行数据到 test.csv 文件
df.to_csv('test.csv')
4.3 数据处理
- head() 函数
head(n) 函数用于读取前 n 行,如果不填写 n ,默认返回5行。
print(df.head(3))
- tail() 函数
tail(n) 函数用于读取后 n 行,如果不填写 n ,默认返回5行。
print(df.tail(3))
- info() 函数
info() 函数用于返回表格的一些基本信息。
print(df.info())
五、数据清洗
数据清洗是对一些没有用的数据进行处理的过程。
很多数据集存在 数据缺失、数据格式错误、错误数据或重复数据
的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。
我们可以利用 Pandas包来进行数据清洗。
5.1 数据清洗的方法
异常类型 | 处理方法 |
---|---|
重复值 | 一般采取删除法来处理,但有些重复值不能删除,例如订单明细数据或交易明细数据等。 |
缺失值 | 可以采取直接删除法,替换法或者插值法,常用的替换法有均值替换、前向、后向替换和常数替换 |
异常值 | 偏离正常范围的值,不是错误值,异常值往往采取盖帽法或者数据离散化 |
错误值 | 指的是数据格式错误,往往采取转换为相同格式的数据 |
5.2 清洗案例
- 清洗空值
如果我们要删除包含空字段的行,可以使用 dropna() 方法
,语法格式如下:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数 | 说明 |
---|---|
axis | 默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。 |
how | 默认为 ‘any’ 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how=‘all’ 一行(或列)都是 NA 才去掉这整行。 |
thresh | 设置需要多少非空值的数据才能保留。 |
subset | 想要检查的列。如果是多个列,可以使用列名的 list 作为参数 |
inplace | 如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。 |
使用 isnull() 函数
判断各个单元格是否为空。
import pandas as pd# 读取csv文件
df = pd.read_csv('../csv/nba.csv')
temp = df.head(6)
# 判断各个单元格是否为空
print(temp['College'].isnull())
Pandas 将 NAN 当作空值处理,我们也可以再定义空值
。
# 定义当作空值处理的数据
missing_data = ['n/a','na','--']
# 读取csv文件
df = pd.read_csv('../csv/nba.csv',na_values=missing_data)
我们可以用 fillna() 函数来替换一些空值。
# 替换所有
df2 = df.fillna(123456)
# 替换某一列
df2 = df['College'].fillna(12345)
Pandas使用 mean()、median() 和 mode() 方法计算列的均值(所有值加起来的平均值)、中位数值(排序后排在中间的数)和众数(出现频率最高的数)
。
# 临时dataframe对象
temp = df.head(6)
# 计算平均值
mean = temp['Age'].mean()
# 中位数
median = temp['Age'].median()
# 众数
mode = temp['Age'].mode()
# 使用中位数替换空值
print(temp['College'].fillna(mean))
- 清洗格式错误数据
数据格式错误的单元格会使数据分析变得困难,甚至不可能。我们可以通过包含空单元格的行,或者将列中的所有单元格转换为相同格式的数据。
to_datetime()
是格式化日期的函数。
- 清洗异常数据
我们可以对异常的数据进行替换或者移除。
import pandas as pd# 异常数据1823
person = {'name': ['xiaoguo', 'xiaojiang'],'age': [20, 1823]
}
df = pd.DataFrame(person)
# 修改异常数据
df.loc(1)['age'] = 18
print(df)
- 清洗重复数据
如果我们要清洗重复数据,可以使用 duplicated() 函数
判断和 drop_duplicates() 函数
删除。
# 判断是否重复
sign = df.duplicated('age')
# 删除重复行
temp = df.drop_duplicates('age')
总结
以上就是本次要分享给大家的内容啦!本文简单介绍了 Pandas中的两种数据类型——Series和DataFrame,以及 csv 文件的读取,利用Pandas进行数据清洗。
😊 初心致力于打造软件开发和大数据领域最通俗易懂的文章,希望能帮助到你。
🍺 当你真正喜欢做一件事时,自律就会成为你的本能。
😍 本文由初心原创,首发于CSDN博客,喜欢的话记得点赞收藏哦!我们下期再见!
相关文章:

【Pandas】数据分析入门
文章目录前言一、Pandas简介1.1 什么是Pandas1.2 Pandas应用二、Series结构2.1 Series简介2.2 基本使用三、DataFrame结构3.1 DataFrame简介3.2 基本使用四、Pandas-CSV4.1 CSV简介4.2 读取CSV文件4.3 数据处理五、数据清洗5.1 数据清洗的方法5.2 清洗案例总结前言 大家好&…...

【c++】:list模拟实现“任意位置插入删除我最强ƪ(˘⌣˘)ʃ“
文章目录 前言一.list的基本功能的使用二.list的模拟实现总结前言 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中࿰…...

QT表格控件实例(Table Widget 、Table View)
欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀 文章目录前言一、图示实例二、列…...

第二章Vue组件化编程
文章目录模块与组件、模块化与组件化模块组件模块化组件化Vue中的组件含义非单文件组件基本使用组件注意事项使用 kebab-case使用 PascalCase组件的嵌套模板templateVueComponent一个重要的内置功能单文件组件Vue脚手架使用Vue CLI脚手架先配置环境初始化脚手架分析脚手架结构实…...

面试官:vue2和vue3的区别有哪些
目录 多根节点,fragment(碎片) Composition API reactive 函数是用来创建响应式对象 Ref toRef toRefs 去除了管道 v-model的prop 和 event 默认名称会更改 vue2写法 Vue 3写法 vue3组件需要使用v-model时的写法 其他语法 1. 创…...
【TopK问题】——用堆实现
文章目录一、TopK问题是什么二、解决方法三、时间复杂度一、TopK问题是什么 TopK问题就是从1000个数中找出前K个最大的数或者最小的数这样的类似问题。 不过并不要求这k个数字必须是有序的,如果题目有要求,则进行堆排序即可。 还有比如求出全国玩韩信…...

【Spring从成神到升仙系列 四】从源码分析 Spring 事务的来龙去脉
👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…...
使用Nginx反向代理OpenAI API
由于OpenAI的API在国内无法访问,所以可以通过海外服务器利用Nginx实现反向代理。 安装Nginx 这一步就不赘述了,不同的Linux系统安装方式略有不同,根据自己的服务器的系统自行百度即可。 OpenSSL创建证书 因为OpenAI的接口是https协议的&a…...
USB键盘实现——字符串描述符(四)
字符串描述符 字符串描述符内容解析和 HID鼠标 一致。 获取字符串描述符请求 标准设备请求 typedef struct __attribute__ ((packed)){union {struct __attribute__ ((packed)) {uint8_t recipient : 5; ///< Recipient type usb_request_recipient_t.uint8_t type …...

STM32的中断
目录 一、STM32中断概述 二、外部中断控制器EXTI 三、按键中断 四、串口中断 一、STM32中断概述 处理器中的中断在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的…...

Flink进阶篇-CDC 原理、实践和优化采集到Doris中
简介 基于doris官方用doris构建实时仓库的思路,从flinkcdc到doris实时数仓的实践。 原文 Apache Flink X Apache Doris 构建极速易用的实时数仓架构 (qq.com) 前提-Flink CDC 原理、实践和优化 CDC 是什么 CDC 是变更数据捕获(Change Data Captur…...

看完这篇 教你玩转渗透测试靶机vulnhub——My File Server: 1
Vulnhub靶机My File Server: 1渗透测试详解Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:FTP匿名登入:③:SMB共享服务…...

OpenHarmony实战STM32MP157开发板 “控制” Hi3861开发板 -- 中篇
一、前言 我们在 OpenHarmony实战STM32MP157开发板 “控制” Hi3861开发板 – 上篇 中介绍到了,App面板的开发,以及JS API接口的开发和调用。 那么本篇文章,会详解:BearPi-HM Nano开发板,如何实现数据上报和指令接收响应的。 看到这里,可能有同学可能已经知道思路了,因…...

【数据结构初阶】单链表
目录一、思路>>>>>>>>>>>>过程<<<<<<<<<<<<<<<1.打印2.尾插3.尾删4.头插5.头删6.查找7.指定位置后插入8.指定位置后删除9.链表的销毁二、整个程序1.SLTlist.c2.SLTlist.c一、思路 #define …...

多线程代码案例-阻塞队列
hi,大家好,今天为大家带来多线程案例--阻塞队列 这块知识点也很重要,要好好掌握呀~~~ 🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸🌸&#x…...

mysql的limit查询竟然有坑?
背景 最近项目联调的时候发现了分页查询的一个bug,分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。 .png) 那么问题来了,查询第一页和第二页的时候都出现了11,12,13的记录…...

【Docker】MAC电脑下的Docker操作
文章目录安装Docker部署mysql 一主一从登录ChatGPT搞方案本地创建一个文件夹编辑docker-compose.yml文件启动检查并编排容器验证基于command的my.cnf配置的加载主数据库建一个用户给子数据库用于主从复制启动主从同步安装Docker 官网地址 https://www.docker.com/ 下载安装 验…...

【Python3】matplotlib,模块,进/线程,文件/xml,百度人脸api,hal/aiohttp/curl
文章目录1.matplotlib/时间复杂度/线性表:顺序表要求存储空间必须连续2.python模块导入:python3 -c ‘import sys;print(sys.path)’ 显示导入模块时会去哪些路径下查找3.进/线程:进/线程是不能随便创建,就像每招一个员工是有代价…...

异或相关算法
文章目录1. 异或的性质2. 题目一3. 题目二4. 题目三5. 题目四1. 异或的性质 我们知道,异或的定义是:相同为0,相异为1。所以也被称为无进位相加,根据这定义,我们可以得出三个性质: 1. N ^ N0。2. N ^ 0N。3…...
python 使用pyshp读写shp文件
安装 pip install pyshp 引入 import shapefile读取 sfshapefile.Reader("{路径名}",encodingutf-8) # 仅仅读取 shapes与shape shapessf.shapes() 返回值是一个列表,包含该文件中所有的”几何数据”对象shapesf.shape(0) Shape是第1个”几何数据”…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...