Python学习之-Pandas详解

前言:

Pandas 是一个开源的 Python 数据分析库,它提供了高性能、易于使用的数据结构和数据分析工具。Pandas提供 了方便的类表格和类SQL的操作,同时提供了强大的缺失值处理方法,可以方便的进行数据导入、选取、清洗、处理、合并、统计分析等操作。最核心的两个数据结构是 DataFrame 和 Series。

1 DataFrame和 Series的用法

DataFrame 是 Pandas 库中另一个基本的数据结构。DataFrame 可以看作是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame 既有行索引也有列索引,它可以被看作是由 Series 组成的字典(共用同一个索引)。
Pandas中的Series对象是一种带有标签数据的一维数组,标签在Pandas
中有对应的数据类型"Index", Series类似于一维数组与字典的结合。

1.1 创建一个 DataFrame 的示例:

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd# 创建一个 DataFrame 对象
data = {'Country': ['Belgium', 'India', 'Brazil'],'Capital': ['Brussels', 'New Delhi', 'Brasília'],'Population': [11190846, 1303171035, 207847528]}df = pd.DataFrame(data)# 查看 DataFrame 对象
print(df)
'''Country    Capital  Population
0  Belgium   Brussels    11190846
1    India  New Delhi  1303171035
2   Brazil   Brasília   207847528
'''

访问和操作 DataFrame 数据:

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd# 创建一个 DataFrame 对象
data = {'Country': ['Belgium', 'India', 'Brazil'],'Capital': ['Brussels', 'New Delhi', 'Brasília'],'Population': [11190846, 1303171035, 207847528]}df = pd.DataFrame(data)# 访问列数据
print(df['Capital'])  # 输出: "Capital" 列的值# 添加新列
df['Area'] = pd.Series([30510, 3287263, 8515767], index=[0, 1, 2])
print(df)# 访问行数据,通过行索引 (loc) 或行数 (iloc)
print(df.loc[1])  # 输出第二行数据(基于行标签)
print(df.iloc[1])  # 输出第二行数据(基于行数)# 数据筛选
filtered_df = df[df['Population'] > 100000000]
print(filtered_df)# 数据排序
sorted_df = df.sort_values(by='Population', ascending=False)
print(sorted_df)

1.2 Series的创建

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd# 通过列表创建 Series
s1 = pd.Series([1, 3, 5, 7, 9])# 创建时指定索引
s2 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])# 通过字典创建 Series,字典的键自动成为索引
s3 = pd.Series({'a': 1, 'b': 3, 'c': 5, 'd': 7, 'e': 9})

1.3 索引和切片

# 使用索引访问数据
print(s2['c'])  # 输出: 5# 使用切片访问多个数据,切片可以使用位置或索引
print(s2['b':'d'])  # 输出索引 'b' 到 'd' 的数据
'''
b    3
c    5
d    7
dtype: int64
'''
print(s2[1:4])      # 输出位置 1 到 3 的数据
'''
b    3
c    5
d    7
dtype: int64'''

1.4 处理缺失值

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pd# 检测缺失值
s6 = pd.Series([1, 2, None, 4])
print(s6.isnull())  # 查看哪些是缺失值
'''
0    False
1    False
2     True
3    False
dtype: bool
'''# 填充缺失值
print(s6.fillna(0))  # 将缺失值填充为 0
'''
0    1.0
1    2.0
2    0.0
3    4.0
dtype: float64
'''# 删除缺失值
print(s6.dropna())  # 删除所有缺失值
'''
0    1.0
1    2.0
3    4.0
dtype: float64
'''

1.5 Series 之间的运算

Pandas 支持 Series 之间的算数运算,包括加、减、乘、除等,并且会自动根据索引对齐数据。

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pds7 = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
s8 = pd.Series([1, 2, 3, 4], index=['b', 'c', 'd', 'e'])# 根据索引对齐进行加法运算,没有对齐的索引处会产生 NaN
result = s7 + s8
print(result)
'''
a     NaN
b    21.0
c    32.0
d    43.0
e     NaN
dtype: float64
'''

1.6 数据描述和统计

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pds2 = pd.Series([1, 3, 5, 7, 9], index=['a', 'b', 'c', 'd', 'e'])# 计算基本的统计数据
print(s2.describe())  # 输出 count, mean, std, min, percentiles, max# 其他统计函数
print(s2.max())  # 最大值
print(s2.min())  # 最小值
print(s2.sum())  # 求和
'''
count    5.000000
mean     5.000000
std      3.162278
min      1.000000
25%      3.000000
50%      5.000000
75%      7.000000
max      9.000000
dtype: float64
9
1
25
'''

2 常见的pandas使用场景

2.1 数据读取和写入

Pandas 支持多种格式的数据读取和写入,如 CSV、Excel、JSON、HTML、SQL 等。

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/14 14:14
# @Author  : Summer
# @File    : pandas_test
# @describe:
"""
import pandas as pdtry:df = pd.read_csv('example.csv', encoding='utf-8')  # 默认编码
except UnicodeDecodeError:try:df = pd.read_csv('example.csv', encoding='latin1')  # 尝试 latin1 编码except UnicodeDecodeError:df = pd.read_csv('example.csv', encoding='ISO-8859-1')  # 尝试 ISO-8859-1 编码# 或者使用其他可能的编码,比如 'cp1252', 'gbk' 等# 写入 Excel 文件
df.to_excel('example.xlsx', sheet_name='Sheet1')

2.2 数据查看和简单统计

# 查看前5行数据
print(df.head())# 查看数据描述性统计
print(df.describe())

2.3 数据筛选和过滤

使用条件表达式选择数据或者使用某些特定的列。

# 选择 "age" 列大于 30 的行
filtered_df = df[df['age'] > 30]# 仅选择 "name" 和 "age" 两列
selected_columns = df[['name', 'age']]

2.4. 缺失数据处理

Pandas 提供了处理缺失数据的功能,如填充缺失值或删除含有缺失值的行列。

# 填充缺失值
df.fillna(value=0, inplace=True)# 删除含有缺失值的行
df.dropna(inplace=True)

2.5. 数据合并和连接

可以将多个 DataFrame 进行合并(横向或纵向)。

# 纵向合并
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
merged_df = pd.concat([df1, df2], ignore_index=True)# 横向连接
df3 = pd.DataFrame({'C': [10, 11], 'D': [12, 13]})
joined_df = df1.join(df3)

2.6. 数据分组与聚合

使用 groupby 方法进行数据分组,并可以对分组后的数据进行聚合操作。

# 按 "department" 分组并计算薪资平均值
grouped_df = df.groupby('department')['salary'].mean()

2.7. 数据排序

可以对数据进行排序,按照某一列或多列的值进行排序。

# 按照 "age" 列升序排序
sorted_df = df.sort_values(by='age', ascending=True)

2.8. 处理时间序列数据

Pandas 提供了很多处理时间序列数据的功能,如日期的生成、解析、时间范围的生成等。

# 将字符串转换为 datetime 对象,并作为 DataFrame 的索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

总结:

以上只是pandas的一些简单的应用,实际pandas的功能远不止于此,对于有兴趣的朋友可以继续深入了解pandas的应用。 Pandas 的一些关键特性和功能的总结。
核心数据结构
Series:一维带标签数组,能够保存任意数据类型(整数、字符串、浮点数、Python 对象等)。
DataFrame:二维标签数据结构,类似于 SQL 表格或 Excel 表单。它由多种类型的列构成。

数据输入/输出
支持多种格式的数据读取和写入,如 CSV、Excel、JSON、HTML 和 SQL 数据库。提供简洁的代码来导入和导出数据。

数据查看与检索
通过 head(), tail(), describe() 等方法方便地查看数据摘要。
可以通过索引、名称进行切片和筛选操作。

数据处理
索引、选择与过滤:涵盖数据标签和整数索引访问。
数据清洗:
便于识别和过滤缺失数据或基于其他准则进行数据选择。
数据合并与连接:支持多种方式将多个 DataFrame 和 Series 组合或连接。
数据透视表功能:对数据集进行透视和汇总。

数据聚合和分组操作
通过 groupby 功能实现数据分组后进行汇总、转换和过滤。
时间序列分析
支持日期范围生成、频率转换、日期移动等操作。
适用于时间序列数据的统计和绘图。
数据清洗和准备
提供多种数据类型转换的能力。
支持对文本数据进行正则表达式处理。

性能和效率
底层编写有大量优化的 Cython 代码。
功能扩展性强,很好地与其他库(如 NumPy 和 Matplotlib)整合。
数据可视化与 Matplotlib 集成,可以方便地创建各种图表来可视化数据。

使用场景
数据分析、数据科学、机器学习、金融分析等领域的数据处理和数据清洗。
适用于从小型到大型、复杂数据集的多样化数据操作。

可以与其他流行的 Python 数据科学库,如 Scikit-learn、Statsmodels 和 TensorFlow 结合使用。
总之,Pandas 是数据科学领域广泛使用的必备工具,它提供了数据处理和分析所需的一切基础设施,使得数据分析更加直观和高效。

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

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

相关文章

如何进行宏观经济预测

理性预期经济学提出了理性预期的概念,强调政府在制定各种宏观经济政策时,要考虑到各行为主体预期对政策实施有效性的影响,积极促成公众理性预期的形成,从而更好地实现宏观调控的目标。政府统计要深入开展统计分析预测研究&#xf…

poi-tl的使用(通俗易懂,全面,内含动态表格实现 包会!!)

最近在做项目时候有一个关于解析Html文件,然后将解析的数据转化成word的需求,经过调研,使用poi-tl来实现这个需求,自己学习花费了一些时间,现在将这期间的经验总结起来,让大家可以快速入门 poi-tl的介绍 …

979: 输出利用先序遍历创建的二叉树的后序遍历序列

解法&#xff1a; #include<iostream> using namespace std; struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode(char c) :val(c), left(NULL), right(NULL) {}; }; TreeNode* buildTree() {char c;cin >> c;if (c #) {return NULL;}TreeNode*…

Android图形显示架构概览

图形显示系统作为Android系统核心的子系统&#xff0c;掌握它对于理解Android系统很有帮助&#xff0c;下面从整体上简单介绍图形显示系统的架构&#xff0c;如下图所示。 这个框架只包含了用户空间的图形组件&#xff0c;不涉及底层的显示驱动。框架主要包括以下4个图形组件。…

内网通如何去除广告,内网通免广告生成器

公司使用内网通内部传输确实方便&#xff01;但是会有广告弹窗推送&#xff01;这个很烦恼&#xff01;那么如何去除广告呢&#xff01; 下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1CVVdWexliF3tBaFgN1W9aw?pwdhk7m 提取码&#xff1a;hk7m ID&#xff1a;…

Uniapp小程序路由拦截器、navigator不被拦截

添加一个文件interceptor.js&#xff08;名字随意、位置随意&#xff09; import store from "./store";let config {//白名单页面whiteList: ["/pages/login/login","/pages/guides/guides","/pages/index/index"],//登录页loginPa…

mysql dll文件的缺失和Can‘t connect to MySQL server on ‘localhost‘ (10061)

个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…

InternlM2

第一次作业 基础作业 进阶作业 1. hugging face下载 2. 部署 首先&#xff0c;从github上git clone仓库 https://github.com/InternLM/InternLM-XComposer.git然后里面的指引安装环境

【自研网关系列】请求服务模块和客户端模块实现

&#x1f308;Yu-Gateway&#xff1a;&#xff1a;基于 Netty 构建的自研 API 网关&#xff0c;采用 Java 原生实现&#xff0c;整合 Nacos 作为注册配置中心。其设计目标是为微服务架构提供高性能、可扩展的统一入口和基础设施&#xff0c;承载请求路由、安全控制、流量治理等…

【机器学习】数学基础详解

线性代数&#xff1a;构建数据的骨架 数学对象 标量&#xff08;Scalar&#xff09; 标量是最基本的数学对象&#xff0c;代表了单个的数值&#xff0c;无论是整数还是实数。在机器学习中&#xff0c;标量可以用来表示一个模型的单个参数&#xff0c;如偏差&#xff08;bias&…

如何更好地理解 Vue 3 watch 侦听器的用法

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java中Map和Set的用法及介绍

在Java中&#xff0c;Map 和 Set 是两种非常常用的集合类型&#xff0c;它们分别属于Java集合框架的一部分。以下是它们的介绍和用法&#xff1a; Map (映射) Map 是一个存储键值对&#xff08;key-value pairs&#xff09;的集合&#xff0c;它允许你通过键&#xff08;key&…

分类预测 | Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现RIME-LSSVM霜冰算法优化最小二乘支持向量机数…

【C++庖丁解牛】哈希表/散列表的设计原理 | 哈希函数

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.哈希概念2.哈希冲突…

18. Linux API 编程预备知识

【操作系统基础程序】 操作系统提供了一组用户使用计算机所需的基础程序&#xff0c;实现了使用计算机必备的基础功能&#xff0c;比如&#xff1a;用户管理、外存储器管理、文件管理、设置网络连接、编译程序&#xff0c;这组程序所在目录会记录在环境变量中&#xff0c;直接…

java项目实战之图书管理系统(1)

✅作者简介&#xff1a;大家好&#xff0c;我是再无B&#xff5e;U&#xff5e;G&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G-CSDN博客 1.背景 图书管理系统是一种用于管理图书…

基于springboot的网上订餐管理系统

前言 本次毕业设计的题目就是基于Java的网上订餐管理系统。本论文就毕业设计的容&#xff0c;系统地阐述了整个基于Java的网上订餐管理系统的功能与实现。实现了从菜品管理&#xff0c;菜品分类和查询&#xff0c;到订餐车实现&#xff0c;用户订单处理&#xff0c;再到系统管…

ERROR 1052 (23000): Column ‘deptno‘ in field list is ambiguous

错误原因&#xff1a; 这个错误通常是在多表查询中&#xff0c;因为你的SQL查询中包含了多个表&#xff0c;并且这些表中都有一个名为deptno的列。这会导致数据库无法确定你要引用哪个表中的 deptno列&#xff0c;从而产生歧义。 解决方法&#xff1a; 为了解决这个问…

JVM虚拟机(三)垃圾回收简介、垃圾回收算法、分代回收、垃圾回收器种类、G1垃圾回收器

目录 一、什么是垃圾回收&#xff1f;1.1 什么是垃圾回收&#xff1f;1.2 什么对象能被垃圾回收&#xff1f;1&#xff09;引用计数法2&#xff09;可达性分析算法 二、JVM 垃圾回收算法2.1 标记清除算法2.2 标记整理算法&#xff08;标记压缩算法&#xff09;2.3 复制算法2.4 …

python基于opencv实现数籽粒

千粒重是一个重要的农艺性状&#xff0c;通过对其的测量和研究&#xff0c;我们可以更好地理解作物的生长状况&#xff0c;优化农业生产&#xff0c;提高作物产量和品质。但数籽粒数目是一个很繁琐和痛苦的过程&#xff0c;我们现在用一个简单的python程序来数水稻籽粒。代码的…