news 2026/4/24 7:50:16

【数据处理与统计分析】3.Pandas介绍以及使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【数据处理与统计分析】3.Pandas介绍以及使用

一、Pandas框架概述

1、Pandas介绍

Python在数据处理上独步天下:代码灵活、开发快速;尤其是Python的Pandas包,无论是在数据分析领域、还是大数据开发场景中都具有显著的优势:

  • Pandas是Python的一个第三方包,也是商业和工程领域最流行的结构化数据工具集,用于数据清洗、处理以及分析

  • Pandas在数据处理上具有独特的优势:

    • 底层是基于Numpy构建的,所以运行速度特别的快

    • 有专门的处理缺失数据的API

    • 强大而灵活的分组、聚合、转换功能

适用场景:

  • 数据量大到Excel严重卡顿,且又都是单机数据的时候,使用Pandas

    • Pandas用于处理单机数据(小数据集(相对于大数据来说))

  • 大数据ETL数据仓库中,对数据进行清洗及处理的环节使用Pandas

2、安装Pandas

打开cmd窗口,输入如下命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pandas

注意:Anaconda默认已经安装了Pandas以及Numpy等内容

3、Pandas初体验

pandas解释:

它是Python的1个第三方模块, 可以实现: 数据的采集, 存储, 预处理, 分析, 可视化等操作

读取 GDP数据.csv 数据并展示对应数据曲线图

(1). 准备动作, 即: 加载文件

# 导包, 如下是连接Linux虚拟机时 的设置. import pandas as pd import numpy as np import os print(os.getcwd()) # current work directory: 当前的工作目录, 默认是: /root

(2). 绘制中国的近年的GDP变化曲线

# 4. 绘制中国GDP的变化曲线. # china_df.plot() china_df.GDP.plot()

(3).分别查询中国、美国、日本三国的GDP数据,并绘制GDP变化曲线、进行对比

# 1. 链式编程, 获取三个国家的GDP数据. china_df = df[df.country == '中国'].set_index('year') usa_df = df[df.country == '美国'].set_index('year') jp_df = df[df.country == '日本'].set_index('year') # 2. 打印三个国家的数据. print(china_df.head()) print(usa_df.head()) print(jp_df.head())
country GDP year 1960 中国 59716467625 1961 中国 50056868957 1962 中国 47209359005 1963 中国 50706799902 1964 中国 59708343488 country GDP year 1960 美国 543300000000 1961 美国 563300000000 1962 美国 605100000000 1963 美国 638600000000 1964 美国 685800000000 country GDP year 1960 日本 44307342950 1961 日本 53508617739 1962 日本 60723018683 1963 日本 69498131797 1964 日本 81749006381
# 3. 绘制中美日三国的GDP曲线, 如下的方式, 会绘制三张图. china_df.plot() usa_df.plot() jp_df.plot()

# 4. 绘制中美日三国的GDP曲线, 如下的方式, 绘制到1张图中. china_df.GDP.plot() usa_df.GDP.plot() jp_df.GDP.plot()

(4). 绘制中美日三国GDP数据, 加入 图例(英文)

# 1. 链式编程, 获取三个国家的GDP数据. china_df = df[df.country=='中国'].set_index('year') usa_df = df[df.country=='美国'].set_index('year') jp_df = df[df.country=='日本'].set_index('year') # 核心细节: 修改列名. rename()函数即可. china_df.rename(columns={'GDP':'China'}, inplace=True) usa_df.rename(columns={'GDP':'USA'}, inplace=True) jp_df.rename(columns={'GDP':'JP'}, inplace=True) # 2. 打印三个国家的数据. print(china_df.head()) print(usa_df.head()) print(jp_df.head())
country China year 1960 中国 59716467625 1961 中国 50056868957 1962 中国 47209359005 1963 中国 50706799902 1964 中国 59708343488 country USA year 1960 美国 543300000000 1961 美国 563300000000 1962 美国 605100000000 1963 美国 638600000000 1964 美国 685800000000 country JP year 1960 日本 44307342950 1961 日本 53508617739 1962 日本 60723018683 1963 日本 69498131797 1964 日本 81749006381
# 3. 绘制中美日三国的GDP曲线, 增加颜色 和 图例. china_df.China.plot(color='red', legend=True) usa_df.USA.plot(color='blue', legend=True) jp_df.JP.plot(color='gray', legend=True)

(5). 绘制中美日三国GDP数据, 加入 图例(中文)

# 1. 链式编程, 获取三个国家的GDP数据. china_df = df[df.country=='中国'].set_index('year') usa_df = df[df.country=='美国'].set_index('year') jp_df = df[df.country=='日本'].set_index('year') # 核心细节: 修改列名. rename()函数即可. china_df.rename(columns={'GDP':'中国'}, inplace=True) # 修改源数据 usa_df.rename(columns={'GDP':'美国'}, inplace=True) jp_df.rename(columns={'GDP':'日本'}, inplace=True) # 2. 打印三个国家的数据. print(china_df.head()) print(usa_df.head()) print(jp_df.head())
country 中国 year 1960 中国 59716467625 1961 中国 50056868957 1962 中国 47209359005 1963 中国 50706799902 1964 中国 59708343488 country 美国 year 1960 美国 543300000000 1961 美国 563300000000 1962 美国 605100000000 1963 美国 638600000000 1964 美国 685800000000 country 日本 year 1960 日本 44307342950 1961 日本 53508617739 1962 日本 60723018683 1963 日本 69498131797 1964 日本 81749006381
# 3. 绘制中美日三国的GDP曲线, 增加颜色 和 图例. china_df.中国.plot(color='red', legend=True) usa_df.美国.plot(color='blue', legend=True) jp_df.日本.plot(color='gray', legend=True)

二、Pandas数据结构与数据类型

1、Pandas数据结构和数据类型

上图为pandas读取并展示出来的数据,以此为例讲解Pandas的核心概念,以及这些概念的层级关系:

  • DataFrame

    • Series

      • 索引列

        • 索引名、索引值

        • 索引下标、行号

      • 数据列

        • 列名

        • 列值,具体的数据

其中最核心的就是Pandas中的两个数据结构:DataFrame和Series

2、Series对象

Series也是Pandas中的最基本的数据结构对象,下文中简称s对象;是DataFrame的列对象series本身也具有索引

Series是一种类似于一维数组的对象,由下面两个部分组成:

  • values:一组数据(numpy.ndarray类型)

  • index:相关的数据索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。

2.1 Series对象的创建及常用属性

2.1.1Series对象的创建
# 导包 import pandas as pd import numpy as np
# Series对象: 它是Pandas的核心对象, 代表一行或者一列数据, 可以理解为是: 一维数组 + 对应的索引 # 方式1: 把Python列表 -> Series对象, 默认索引, 从0开始, 逐个递增. s1 = pd.Series([1, 2, 3]) print(s1) print(type(s1))

2.1.2 Series对象的常用属性

3. DataFrame对象

3.1 DataFrame对象的创建, 常用属性 和 方法

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

  • 行索引,表明不同行,横向索引,叫index,0轴,axis=0

  • 列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

DataFrame的创建有很多种方式

读取文件数据返回df:在之前的学习中我们使用了pd.read_csv('csv格式数据文件路径')的方式获取了df对象

使用字典、列表、元组创建df:接下来就展示如何使用字典、列表+元组、numpy创建df对

3.1.1 DataFrame对象的创建

3.1.2 创建DataFrame对象的案例以及常用属性引入
# 需求: 生成10个学生的5门功课的数据. # 并将列名改为: ['语文', '数学', '英语', '物理', '化学'], # 索引列改为: ['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9']

# 7. 上述代码也可以直接生成, 即: 构建DataFrame对象的时候, 直接指定索引和列名. score_df2 = pd.DataFrame(data=score_data, columns=col_names, index=index_names) print(score_df2.shape) # (10, 5) DataFrame对象的结构: 元组: (10,5) 10行,5列 print(score_df2.index) # 行索引列表: Index(['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9'], dtype='object') print(score_df2.columns) # 列索引列表: Index(['语文', '数学', '英语', '物理', '化学'], dtype='object') print(score_df2.values) # 直接获取其中array的值 score_df2

print(score_df2.info()) # 获取DataFrame基本信息 print(score_df2.describe()) #获取DataFrame统计信息
<class 'pandas.core.frame.DataFrame'> Index: 10 entries, 学生_0 to 学生_9 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Python 10 non-null int32 1 Java 10 non-null int32 2 C 10 non-null int32 3 C++ 10 non-null int32 4 .Net 10 non-null int32 dtypes: int32(5) memory usage: 280.0+ bytes None Python Java C C++ .Net count 10.000000 10.000000 10.000000 10.000000 10.00000 mean 78.100000 68.100000 75.800000 66.700000 76.10000 std 15.358313 18.290556 15.039208 17.969418 20.84573 min 56.000000 41.000000 54.000000 42.000000 40.00000 25% 62.750000 51.250000 63.250000 50.500000 61.50000 50% 85.500000 70.000000 74.500000 69.000000 76.50000
# T: 转置 score_df2.T

3.1.3 DataFrame 对应常用的方法
# 显示前n行内容 # score_df2.head() #默认显示前5行 score_df2.head(6) #手动设置显示前6行

# 显示后n行内容 #score_df2.tail() #默认显示后5行 score_df2.tail(6) #手动设置显示后6行

3.1.4 DatatFrame索引的设置
(1).修改行列索引值

行列索引改成下面格式:

# 修改行列索引值 stu_index = ["学生_" + str(i) for i in range(score_df.shape[0])] # shape 获取结构, 是一个元组(10, 5), 第一个元素表示行, 第二个表示列 stu_col = ["Python", "Java", "C", "C++", ".Net"] # 必须整体全部修改, 行列个数必须一致 score_df2.index = stu_index score_df2.columns = stu_col score_df2
(2).删除行
score_df.drop('同学0', axis=1, inplace=True) # 0: 列, 1 行 score_df

同学0已被删除

(2).重设索引

reset_index(drop=False)

  • 设置新的下标索引

  • drop:默认为False,不删除原来索引,如果为True,删除原来的索引值

#重设索引 #- reset_index(drop=False) # - 设置新的下标索引 # - drop:默认为False,不删除原来索引,如果为True,删除原来的索引值 score_df2.reset_index()

score_df2.reset_index(drop=True) # 删除原来的索引值

(3).以某列值设置为新的索引

set_index(keys, drop=True)

  • keys: 列索引名成或者列索引名称的列表

  • drop: boolean, default True.当做新的索引,删除原来的列

设置新索引案例

#第一步:创建 df = pd.DataFrame({'month': [1, 4, 7, 10], 'year': [2012, 2014, 2013, 2014], 'sale':[55, 40, 84, 31]}) df

#第二步:以月份设置新的索引 df_new.set_index('month') df_new

#第三步:设置多个索引,以年和月份, 如果加上inplace=True, 则是对源数据进行操作 df_new.set_index(['month', 'year']) df_new

4、Pandas的数据类型

df或s对象中具体每一个值的数据类型有很多,如下表所示

可以通过下列API查看s对象或df对象中数据的类型:

s1.dtypes df1.dtypes df1.info() # s对象没有info()方法

1. 演示datetime类型

## 1.演示datetime类型: 日期时间类型 date1 = pd.to_datetime('2026-03-10') print(date1) # 2026-03-10 00:00:00 print(type(date1)) # <class 'pandas._libs.tslibs.timestamps.Timestamp'> date2 = pd.to_datetime(['2026-03-10', '2026-03-11', '2026-03-12']) print(date2) # DatetimeIndex(['2026-03-10', '2026-03-11', '2026-03-12'], dtype='datetime64[ns]', freq=None) print(type(date2)) # <class 'pandas.core.indexes.datetimes.DatetimeIndex'>

2.演示timedelta类型(日期差类型)

# 演示timedelta类型:日期差类型 # 计算两个日期之间的差值 start_date = pd.to_datetime('2024-09-01') end_date = pd.to_datetime('2024-09-05') # 查看数据类型 print(end_date, type(end_date)) # 2024-09-05 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'> # 获取时间间隔(日期差 delta = end_date - start_date print(delta, type(delta)) # 4 days 00:00:00 <class 'pandas._libs.tslibs.timedeltas.Timedelta'>

3.

类型用于表示分类数据,通常用于有限集合中的数据类型,例如性别、颜色、产品类型等。这种类型的优点在于占用更少的内存,并且对分类数据的操作更快

# 创建一个category类型的Series categories = pd.Series(['apple', 'banana', 'apple', 'orange']) # 元素中有重复的数据, series中每个元素都要占用空间 print(categories)

categories2 = pd.Series(['apple', 'banana', 'apple', 'orange'], dtype='category') # 使用了type='category', 减少内存消耗, 只存储唯一值 print(categories2) print(type(categories2))

【上一篇】【数据处理与统计分析】2.Numpy库介绍以及使用

【下一篇】【数据处理与统计分析】4.Pandas基本操作

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 7:49:18

核心基础-消息队列-生产者/消费者模型

生产者/消费者模型 生产者/消费者模型是计算机科学中一种经典的并发设计模式,它通过引入一个共享缓冲区来解耦生产者和消费者,解决两者速度不匹配的问题。该模型在多线程编程、消息队列、操作系统调度等领域有着广泛的应用。作为运维工程师,理解这一模型对于排查系统瓶颈、…

作者头像 李华
网站建设 2026/4/24 7:48:01

Servlet入门指南:从基础到实战

好的&#xff0c;我们来详细讲解 Servlet 的基础知识。Servlet 基础Servlet 是运行在 Web 服务器或应用服务器上的 Java 程序&#xff0c;用于处理客户端&#xff08;通常是 Web 浏览器&#xff09;的请求并生成响应。它是 Java EE (Jakarta EE) 规范中 Web 层技术的核心组件。…

作者头像 李华
网站建设 2026/4/24 7:46:05

RWKV7-1.5B-G1A助力开源协作:使用Git进行模型版本管理与实验追踪

RWKV7-1.5B-G1A助力开源协作&#xff1a;使用Git进行模型版本管理与实验追踪 1. 为什么需要版本管理 在开发基于RWKV7-1.5B-G1A这类大模型的应用项目时&#xff0c;你会发现代码、配置和实验记录每天都在变化。昨天还跑得通的训练脚本&#xff0c;今天可能因为某个参数调整就…

作者头像 李华
网站建设 2026/4/24 7:44:19

个人电子合同自动签署程序,实现基于哈希的简易签约,记录签约时间,双方标识,生成不可篡改凭证,适用于私人借款,合租协议。防止事后抵赖。

结合区块链与创新思维课程中的「去中心信任、不可篡改、时间戳证明」思想&#xff0c;设计一个&#x1f449; 「个人电子合同自动签署程序&#xff08;Hash-Based Signing System&#xff09;」适用于&#xff1a;✅ 私人借款✅ 合租协议✅ 兼职/合作约定✅ 防事后抵赖的小型契…

作者头像 李华
网站建设 2026/4/24 7:44:18

家庭收支链上记账小程序,每笔收支写入链式结构,不可删除,支持家庭成员共同查看,解决账目争议,隐瞒消费问题。

&#x1f449; 「家庭收支链上记账小程序&#xff08;Family Ledger Chain&#xff09;」适用于&#xff1a;✅ 夫妻共同记账✅ 合租室友 AA 结算✅ 父母子女共管账户✅ 解决“钱花哪了”“谁没出钱”的信任问题一、实际应用场景描述&#xff08;Scenario&#xff09;你和家人共…

作者头像 李华