当前位置: 首页 > news >正文

【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的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中&#xff0…...

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中断概述 处理器中的中断在处理器中&#xff0c;中断是一个过程&#xff0c;即CPU在正常执行程序的过程中&#xff0c;遇到外部/内部的紧急事件需要处理&#xff0c;暂时中止当前程序的…...

Flink进阶篇-CDC 原理、实践和优化采集到Doris中

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

看完这篇 教你玩转渗透测试靶机vulnhub——My File Server: 1

Vulnhub靶机My File Server: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;FTP匿名登入&#xff1a;③&#xff1a;SMB共享服务&#xf…...

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,大家好,今天为大家带来多线程案例--阻塞队列 这块知识点也很重要,要好好掌握呀~~~ &#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x1f338;&#x…...

mysql的limit查询竟然有坑?

背景 最近项目联调的时候发现了分页查询的一个bug&#xff0c;分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。 .png) 那么问题来了&#xff0c;查询第一页和第二页的时候都出现了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/时间复杂度/线性表&#xff1a;顺序表要求存储空间必须连续2.python模块导入&#xff1a;python3 -c ‘import sys;print(sys.path)’ 显示导入模块时会去哪些路径下查找3.进/线程&#xff1a;进/线程是不能随便创建&#xff0c;就像每招一个员工是有代价…...

异或相关算法

文章目录1. 异或的性质2. 题目一3. 题目二4. 题目三5. 题目四1. 异或的性质 我们知道&#xff0c;异或的定义是&#xff1a;相同为0&#xff0c;相异为1。所以也被称为无进位相加&#xff0c;根据这定义&#xff0c;我们可以得出三个性质&#xff1a; 1. N ^ N0。2. N ^ 0N。3…...

python 使用pyshp读写shp文件

安装 pip install pyshp 引入 import shapefile读取 sfshapefile.Reader("{路径名}",encodingutf-8) # 仅仅读取 shapes与shape shapessf.shapes() 返回值是一个列表&#xff0c;包含该文件中所有的”几何数据”对象shapesf.shape(0) Shape是第1个”几何数据”…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...