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

深入解析Python的Pandas库:数据分析的利器(二)

在数据分析和处理领域,Python的Pandas库是不可或缺的工具。它提供了高效、灵活的数据结构和数据处理工具,极大地方便了数据清洗、探索、建模等任务。本文将通过系统介绍Pandas库的核心功能,帮助开发者从初步数据理解到深入数据分析,全面掌握Pandas的使用技巧。

一、数据的初步了解与操作

在实际数据分析中,首先需要对数据有一个大致的了解。这包括查看数据的基本结构、数据类型、行列分布以及基本统计信息等。Pandas为此提供了一系列简单易用的工具。

1.使用 head() 和 tail() 方法查看数据

当数据集较大时,我们通常想先查看前几行或后几行的数据,以便快速了解每列的数据类型和大致分布。Pandas中的head()和tail()方法可以分别返回数据表的前n行或后n行记录,默认情况下n为5。

import pandas as pd# 示例数据
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'],'年龄': [23, 22, 21, 24, 22, 23, 24, 25],'性别': ['男', '男', '女', '女', '男', '女', '女', '男'],'成绩': [85, 90, 78, 88, 92, 70, 89, 91]
}df = pd.DataFrame(data)# 查看前几行数据
print(df.head())  # 默认显示前5行
print(df.head(3))  # 显示前3行# 查看最后几行数据
print(df.tail())  # 默认显示后5行
print(df.tail(2))  # 显示最后2行

2. 使用 info() 方法查看数据类型和基本信息

info()方法是快速了解数据表中每列的类型和非空数据量的常用方法。它可以帮助我们判断数据类型是否正确,例如字符型、数值型、布尔型等,还能帮助我们快速发现缺失值。

# 查看数据表的结构信息
df.info()

3.使用 shape 属性查看数据表的大小

shape属性返回数据表的行数和列数。它以元组的形式表示,其中第一个值为行数,第二个值为列数。这是了解数据表大小最直接的方法。

# 查看数据表的行数和列数
print("数据表大小:", df.shape)

4. 使用 describe() 方法获取数值统计信息

describe()方法用于快速了解数值型数据的分布情况。它返回的数据包括均值、标准差、最小值、最大值、四分位数等,对于探索性数据分析非常有帮助。

# 获取数值型数据的描述性统计信息
print(df.describe())

二、列操作

在数据处理中,列操作是非常常见的需求。Pandas提供了强大的列管理功能,包括重命名、删除、选择和新增列等。

1.修改列名

可以通过columns属性直接修改列名,或者使用rename()方法进行更加灵活的重命名。

# 修改列名
df.columns = ['Name', 'Age', 'Gender', 'Score']
print(df)# 使用 rename() 方法进行重命名
df.rename(columns={'Name': '姓名', 'Age': '年龄'}, inplace=True)
print(df)

2.删除列

使用drop()方法可以删除指定的列。inplace=False表示不修改原数据,而是返回一个新的数据框。

# 删除列
df.drop(columns=['性别'], inplace=False)

3.获取单列或多列数据

可以通过直接访问列名或使用双重方括号的方式获取单列或多列数据

# 获取单列数据
print(df['年龄'])# 获取多列数据
print(df[['姓名', '成绩']])

4.增加新列

通过直接赋值的方式可以为数据表增加新列。新列的数据可以是标量、列表、Series或者通过表达式计算得出。

# 增加一个常量列
df['新列1'] = 1# 增加一个基于已有列计算的新列
df['成绩提升'] = df['成绩'] + 5print(df)

5.在指定位置插入新列

使用insert()方法可以在数据表的指定位置插入新列。

# 在第二列位置插入新列
df.insert(1, '班级', ['A班', 'B班', 'A班', 'B班', 'A班', 'B班', 'A班', 'B班'])
print(df)

三、数据类型转换

在数据分析过程中,可能需要将某些列转换为不同的数据类型。Pandas提供了多种方法来完成类型转换,例如astype()、pd.to_datetime()、pd.to_numeric()等。

1.使用 astype() 方法进行类型转换

astype()方法可以将指定列转换为目标数据类型,如字符串、整数、浮点数等。

# 将"年龄"列转换为浮点数类型
df['年龄'] = df['年龄'].astype(float)
print(df.dtypes)

2.使用专用方法进行类型转换

Pandas提供了一些专用的方法用于转换日期时间、分类变量等特殊类型。

# 将字符串转换为日期类型
df['日期'] = pd.to_datetime(['2023-08-01', '2023-08-02', '2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07', '2023-08-08'])
print(df)# 将数值转换为分类类型
df['班级'] = df['班级'].astype('category')
print(df.dtypes)

四、索引的操作与管理

索引在Pandas中扮演着非常重要的角色,不仅用于标识行,还用于数据的快速定位、分组等操作。Pandas支持多种类型的索引,包括整数索引、标签索引、多级索引等。

1. 设置索引

可以通过set_index()方法将某列设置为索引。

# 将"姓名"列设置为索引
df.set_index('姓名', inplace=True)
print(df)

2.重置索引

使用reset_index()方法可以将索引恢复为普通列。

# 重置索引
df.reset_index(inplace=True)
print(df)

3.更新索引

通过reindex()方法可以添加、删除或重新排列索引。

# 重新排列索引,并填充缺失值
df = df.reindex([0, 1, 2, 3, 5, 6, 7])
print(df)

五、通过函数计算变量的值

Pandas的apply()方法是一个非常强大的工具,它允许我们在DataFrame或Series上应用自定义函数,从而实现数据的灵活处理。apply()不仅支持逐行或逐列地应用函数,还可以实现复杂的计算逻辑。

1.apply() 方法的使用

apply()方法允许我们将自定义函数应用于DataFrame的行或列。参数axis用于指定应用的方向:

  • axis=0:针对每列应用函数。
  • axis=1:针对每行应用函数。
    以下是一个简单的例子,通过自定义函数计算一个新变量:
import pandas as pd# 创建一个示例DataFrame
data = {'姓名': ['张三', '李四', '王五'],'体重': [70, 65, 80]
}
df = pd.DataFrame(data)# 自定义函数,获取体重列的数据
def get_value(row):return row['体重']# 使用 apply 计算新列
df['a'] = df.apply(get_value, axis=1)
print(df.head())

2.apply() 方法的其他应用形式

除了通过行列遍历,我们还可以直接对某列数据使用apply(),例如对数据进行数学计算或使用外部库如math或numpy进行复杂运算。

import math
import numpy as np# 对体重列应用数学函数计算
df['n5'] = df['体重'].apply(math.sqrt)  # 使用 math 库计算平方根
df['n7'] = df['体重'].apply(np.sqrt)  # 使用 numpy 库计算平方根print(df)

3.使用自定义函数处理数据

apply()还可以配合自定义函数,对每个数据进行操作。例如,我们可以截取字符串的第一个字符:

# 自定义函数,截取第一个字符
def get_first(tmp):return tmp[:1]df['n6'] = df['姓名'].apply(get_first)
print(df)

六、总结

本文通过多个方面深入探讨了Pandas库的基本功能与常见操作。从数据的初步了解、列的操作到索引的管理,Pandas提供了全方位的工具支持,极大地提升了数据处理的效率。通过掌握这些方法,开发者可以更加高效地处理复杂的数据任务。Pandas在未来的数据分析、科学计算和人工智能领域将继续发挥重要作用。
上期回归:
深入理解Python数据分析利器——Pandas库详解(一)
后续会持续更新哟~
敬请期待~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解决STM32使用J-Link可以擦除和读取但是无法烧录问题
  • Linux文件编程(进阶)
  • 每日刷一刷力扣SQL(八)
  • 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)
  • java 使用 aws s3 sdk 通过分段下载来实现 html 页面 video 的断点播放、拖动进度播放
  • 小程序面试题一
  • 【SAM下游任务微调】TS-SAM: Fine-Tuning Segment-Anything Model for Downstream Tasks
  • DDoS攻击的应对策略
  • 小程序学习day13-API Promise化、全局数据共享(状态管理)、分包
  • 探索安全领域的新星:哈希函数SHA3-512
  • 基于深度学习的高效模型压缩
  • FPGA开发——IIC实现简单的串口回环
  • Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具[Python代码]
  • Windows连接虚拟机中的mysql5失败
  • 跨域解决 | 面试常问问题
  • [译]CSS 居中(Center)方法大合集
  • 【React系列】如何构建React应用程序
  • Hibernate【inverse和cascade属性】知识要点
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java深入 - 深入理解Java集合
  • Java-详解HashMap
  • jquery ajax学习笔记
  • LeetCode18.四数之和 JavaScript
  • Selenium实战教程系列(二)---元素定位
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • ubuntu 下nginx安装 并支持https协议
  • 大型网站性能监测、分析与优化常见问题QA
  • 基于axios的vue插件,让http请求更简单
  • 如何优雅地使用 Sublime Text
  • 新手搭建网站的主要流程
  • 译自由幺半群
  • 用Python写一份独特的元宵节祝福
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​水经微图Web1.5.0版即将上线
  • #includecmath
  • #Z0458. 树的中心2
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)虚拟机的安装与使用,linux系统安装
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (Charles)如何抓取手机http的报文
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (笔记)M1使用hombrew安装qemu
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (四)鸿鹄云架构一服务注册中心
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***通过什么方式***网吧
  • **CI中自动类加载的用法总结
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .htaccess 强制https 单独排除某个目录
  • .htaccess配置常用技巧