Pandas数据处理与分析教程:从基础到实战

news2024/11/25 14:27:41

文章目录

  • 前言
  • 什么是Pandas?
  • Pandas的安装和导入
  • 数据结构
    • Series(案例1:创建Series)
    • DataFrame(案例2:创建DataFrame)
  • 数据读取和写入
    • 从CSV文件中读取数据(案例3:读取CSV文件)
    • 从Excel文件中读取数据(案例4:读取Excel文件)
    • 将数据写入CSV和Excel文件(案例5:写入CSV和Excel文件)
  • 数据操作
    • 数据选择和索引(案例6:选择和索引数据)
    • 数据切片和过滤(案例7:切片和过滤数据)
    • 数据缺失值处理(案例8:处理缺失值)
    • 数据排序和排名(案例9:排序和排名数据)
  • 数据聚合与分组
    • 分组和聚合(案例10:分组和聚合数据)
  • 数据可视化
    • 绘制线形图(案例11:绘制线形图)
    • 绘制柱状图(案例12:绘制柱状图)
  • 高级应用
    • 时间序列分析(案例13:时间序列分析)
    • 合并与连接数据(案例14:合并与连接数据)
  • 数据透视表
    • 创建数据透视表
  • 文件读写
    • 读取和写入CSV文件
    • 读取和写入Excel文件
  • 实战案例之分析销售数据
    • 代码解析
    • 完整代码

前言

在数据分析和数据科学领域,Pandas是Python编程语言中最受欢迎的数据处理库之一。它提供了高效、灵活和易于使用的数据结构,使得数据的清洗、转换和分析变得简单而直观。本教程将详细介绍Pandas的各个方面,包括基本的数据结构、数据操作、数据过滤和排序、数据聚合与分组,以及常见的数据分析任务。
在这里插入图片描述

什么是Pandas?

Pandas是一个开源的Python库,提供了高性能、易用和灵活的数据结构,用于数据处理和分析。它建立在NumPy之上,使得处理结构化数据更加简单和高效。Pandas的两个主要数据结构是Series和DataFrame,可以理解为NumPy数组的增强版。它们提供了更多的功能和灵活性,使得数据处理变得更加直观和方便。

Pandas的安装和导入

要使用Pandas,首先需要将其安装在你的Python环境中。可以通过使用pip命令来进行安装:

pip install pandas

安装完成后,我们可以通过以下方式将Pandas导入到Python代码中:

import pandas as pd

数据结构

Pandas提供了两种基本的数据结构:Series和DataFrame。
在这里插入图片描述

Series(案例1:创建Series)

Series是一种一维的带标签的数组,可以存储任意类型的数据。它类似于带有标签的NumPy数组,但提供了更多的功能和灵活性。

import pandas as pd

data = [1, 2, 3, 4, 5]
s = pd.Series(data)
print(s)

输出结果:

0    1
1    2
2    3
3    4
4    5
dtype: int64

DataFrame(案例2:创建DataFrame)

DataFrame是一种二维的表格型数据结构,可以存储多种类型的数据。它类似于Excel中的电子表格或SQL中的数据库表,提供了行、列的索引,方便对数据进行增删改查。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)
print(df)

输出结果:

     Name  Age Country
0   Alice   25     USA
1     Bob   30  Canada
2  Charlie   35      UK

数据读取和写入

Pandas可以从各种数据源中读取数据,包括CSV文件、Excel文件、数据库等。同时,也可以将数据写入到这些数据源中。
在这里插入图片描述

从CSV文件中读取数据(案例3:读取CSV文件)

import pandas as pd

df = pd.read_csv('data.csv')
print(df)

输出结果:

   Name  Age Country
0  John   25     USA
1  Mary   30  Canada
2  Mark   35      UK

从Excel文件中读取数据(案例4:读取Excel文件)

import pandas as pd

df = pd.read_excel('data.xlsx')
print(df)

输出结果:

   Name  Age Country
0  John   25     USA
1  Mary   30  Canada
2  Mark   35      UK

将数据写入CSV和Excel文件(案例5:写入CSV和Excel文件)

import pandas as pd

df = pd.DataFrame({'Name': ['John', 'Mary', 'Mark'],
                   'Age': [25, 30, 35],
                   'Country': ['USA', 'Canada', 'UK']})

df.to_csv('data.csv', index=False)
df.to_excel('data.xlsx', index=False)

这样就将DataFrame中的数据写入到了CSV和Excel文件中。

数据操作

在数据操作方面,Pandas提供了丰富的功能,包括数据选择和索引、数据切片和过滤、数据缺失值处理、数据排序和排名等。
在这里插入图片描述

数据选择和索引(案例6:选择和索引数据)

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 选择单列
print(df['Name'])

# 选择多列
print(df[['Name', 'Age']])

# 选择行
print(df.loc[0])

# 选择多行
print(df.loc[[0, 2]])

# 利用条件选择
print(df[df['Age'] > 30])

数据切片和过滤(案例7:切片和过滤数据)

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 切片操作
print(df.iloc[1:3, :])

# 过滤操作
print(df[df['Age'] > 30])

数据缺失值处理(案例8:处理缺失值)

import pandas as pd
import numpy as np

data = {'Name': ['Alice', np.nan, 'Charlie'],
        'Age': [25, np.nan, 35],
        'Country': ['USA', 'Canada', np.nan]}
df = pd.DataFrame(data)

# 检查缺失值
print(df.isnull())

# 填充缺失值
df_filled = df.fillna(0)
print(df_filled)

数据排序和排名(案例9:排序和排名数据)

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 按某一列排序
df_sorted = df.sort_values('Age')
print(df_sorted)

# 排名
df['Rank'] = df['Age'].rank()
print(df)

数据聚合与分组

在数据聚合与分组方面,Pandas提供了灵活的功能,可以对数据进行分组、聚合和统计等操作。
在这里插入图片描述

分组和聚合(案例10:分组和聚合数据)

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Country': ['USA', 'Canada', 'UK']}
df = pd.DataFrame(data)

# 按照某一列进行分组
grouped = df.groupby('Country')

# 对分组后的数据进行聚合操作
agg_result = grouped['Age'].mean()
print(agg_result)

数据可视化

Pandas结合Matplotlib库,提供了方便的数据可视化功能,可以直接在Pandas中进行数据图表绘制。
在这里插入图片描述

绘制线形图(案例11:绘制线形图)

import pandas as pd
import matplotlib.pyplot as plt

data = {'Year': [2010, 2011, 2012, 2013, 2014],
        'Sales': [100, 200, 150, 300, 250]}
df = pd.DataFrame(data)

# 绘制线形图
df.plot(x='Year', y='Sales', kind='line')
plt.show()

绘制柱状图(案例12:绘制柱状图)

import pandas as pd
import matplotlib.pyplot as plt

data = {'Year': [2010, 2011, 2012, 2013, 2014],
        'Sales': [100, 200, 150, 300, 250]}
df = pd.DataFrame(data)

# 绘制柱状图
df.plot(x='Year', y='Sales', kind='bar')
plt.show()

高级应用

除了基本的数据操作和可视化外,Pandas还提供了一些高级应用功能,包括时间序列分析、合并与连接数据等。

时间序列分析(案例13:时间序列分析)

import pandas as pd

# 创建一个时间序列
dates = pd.date_range('2023-01-01', '2023-01-10')
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=dates)

# 按月份统计
monthly_data = data.resample('M').sum()
print(monthly_data)

合并与连接数据(案例14:合并与连接数据)

import pandas as pd

data1 = {'Name': ['Alice', 'Bob'],
         'Age': [25, 30]}
df1 = pd.DataFrame(data1)

data2 = {'Name': ['Charlie', 'Dave'],
         'Age': [35, 40]}
df2 = pd.DataFrame(data2)

# 合并两个DataFrame
df_merged = pd.concat([df1, df2])
print(df_merged)

数据透视表

数据透视表是一种用于对数据进行汇总和聚合的功能。在Pandas中,可以使用pivot_table函数来创建数据透视表,通过指定行、列和聚合函数来对数据进行分组和聚合。

创建数据透视表

首先,我们创建一个包含姓名、年份、销售额和利润的DataFrame:

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
        'Year': [2010, 2011, 2012, 2010, 2011, 2012],
        'Sales': [100, 200, 150, 300, 250, 200],
        'Profit': [10, 20, 15, 30, 25, 20]}
df = pd.DataFrame(data)

现在,我们可以使用pivot_table函数创建数据透视表。在这个例子中,我们想要根据姓名和年份对销售额和利润进行汇总:

pivot_table = pd.pivot_table(df, values=['Sales', 'Profit'], index='Name', columns='Year', aggfunc='sum')
print(pivot_table)

输出结果:

        Profit          Sales         
Year      2010 2011 2012  2010 2011 2012
Name                                   
Alice       10  NaN  NaN   300  NaN  NaN
Bob        NaN   20  NaN   NaN  250  NaN
Charlie    NaN  NaN   35   NaN  NaN  350

数据透视表中的每个单元格表示对应姓名和年份的销售额和利润的总和。

文件读写

Pandas提供了各种方法来读取和写入不同格式的文件,如CSV、Excel和SQL等。

读取和写入CSV文件

要读取CSV文件,可以使用read_csv函数,并提供文件路径作为参数。以下是一个示例:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv', encoding='utf-8')

要将DataFrame写入CSV文件,可以使用to_csv方法,并指定要保存的文件名。以下是一个示例:

import pandas as pd

# 写入CSV文件
df.to_csv('output.csv', index=False, encoding='utf-8')

在这个例子中,我们通过指定encoding='utf-8'来确保读取和写入时可以正确处理中文字符。

读取和写入Excel文件

Pandas还可以读取和写入Excel文件。要读取Excel文件,可以使用read_excel函数并指定文件路径。以下是一个示例:

import pandas as pd

# 读取Excel文件
df = pd.read_excel('data.xlsx')

要将DataFrame写入Excel文件,可以使用to_excel方法,并指定要保存的文件名。以下是一个示例:

import pandas as pd

# 写入Excel文件
df.to_excel('output.xlsx', index=False)

实战案例之分析销售数据

代码解析

import pandas as pd

# 读取销售数据文件
df = pd.read_csv('sales_data.csv')

# 查看前几行数据
print(df.head())

导入pandas库并简写为pd。然后使用read_csv函数读取名为sales_data.csv的销售数据文件,并将数据存储在DataFrame对象df中。接着,使用head方法打印出df的前几行数据。

# 查看数据的基本信息
print(df.info())

使用info方法打印出数据的基本信息,包括列名称、数据类型以及非空值的数量等。

# 统计销售额和利润的描述性统计信息
print(df[['Sales', 'Profit']].describe())

使用describe方法进行数据的描述性统计分析,输出销售额和利润的统计指标,如总数、均值、标准差、最小值、25%分位数、50%分位数(中位数)和75%分位数。

# 按照产品类别计算总销售额和利润
category_sales_profit = df.groupby('Category')[['Sales', 'Profit']].sum()
print(category_sales_profit)

使用groupby方法按照产品类别对数据进行分组,然后使用sum方法计算每个产品类别的总销售额和利润,并将结果存储在category_sales_profit中。

# 统计每个月的销售额和利润
df['OrderDate'] = pd.to_datetime(df['OrderDate'])  # 将日期字符串转换为日期对象
df['Month'] = df['OrderDate'].dt.month  # 提取出月份信息
monthly_sales_profit = df.groupby('Month')[['Sales', 'Profit']].sum()
print(monthly_sales_profit)

使用pd.to_datetime函数将日期字符串转换为日期对象,并将其赋值给新列OrderDate。然后,使用dt.month提取出日期对象的月份信息,将其赋值给新列Month。最后,使用groupby方法按照月份对数据进行分组,然后使用sum方法计算每个月的总销售额和利润,并将结果存储在monthly_sales_profit中。

完整代码

import pandas as pd

# 读取销售数据文件
df = pd.read_csv('sales_data.csv')

# 查看前几行数据
print(df.head())

# 查看数据的基本信息
print(df.info())

# 统计销售额和利润的描述性统计信息
print(df[['Sales', 'Profit']].describe())

# 按照产品类别计算总销售额和利润
category_sales_profit = df.groupby('Category')[['Sales', 'Profit']].sum()
print(category_sales_profit)

# 统计每个月的销售额和利润
df['OrderDate'] = pd.to_datetime(df['OrderDate'])  # 将日期字符串转换为日期对象
df['Month'] = df['OrderDate'].dt.month  # 提取出月份信息
monthly_sales_profit = df.groupby('Month')[['Sales', 'Profit']].sum()
print(monthly_sales_profit)

CSV数据:

OrderDateCategorySalesProfit
2021-01-01Electronics10010
2021-01-02Fashion20020
2021-01-03Electronics15015
2021-02-01Fashion30030
2021-02-02Clothing25025

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

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

相关文章

一起学SF框架系列6.2-模块core-Environment

Environment是集成在容器中的抽象接口,它对应用程序环境的两个关键方面进行建模:配置文件(profiles)和属性(properties)。 配置文件(profiles) 配置文件为核心容器中提供了一种机制…

Redis7---单线程和多线程(一)

目录 一、几个面试题 1.Redis的单线程部分 1.2 Redis所谓的“单线程” 1.3 Redis演进变化 1.3.1 Redis 3.x 单线程时代性能很快的原因 1.3.2 Redis 4.0 之前一直采用单线程的主要原因有三个 2. Redis单线程为什么加了多线程特性 3.Redis 6/7的多线程特性和IO多路复用入…

【系统架构】第二章-计算机系统基础知识(一)

计算机硬件 1、处理器:CISC(复杂指令集)、RISC(精简指令集) 2、存储器:按照与处理器的物理距离:片上缓存、片外缓存、主存、外存 3、总线:按照总线在计算机中的位置划分&#xff1a…

大厂流出2023年最新软件测试面试题【全】

1.B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行,可以实现跨平台,客户端零维护,维护成本低,但是个性化能力低,响应速度较慢C/S响应速度快,安全性强,一般应用于局域网中,因…

格雷码转换电路

目录 格雷码转换电路 1、简介 1.2、格雷码转化为二进制码原理如下: 1.3、二进制码转化为格雷码原理如下: 2、实验任务 3、程序设计 3.1、格雷码转换二进制 3.2、二进制转换格雷码 4、仿真测试 5、仿真验证 格雷码转换电路 格雷码,…

推荐一款能够节省办公空间的显示器!

作为一名高校科研人员,课题组师生日常科研工作必备电子设备的维护及更新对于科研进度有着极大影响作用。近日购买了最新一代的戴尔显示器E2424HS。 以下是我的一些真实使用体验: 01 外观高端大气 拆箱前,在检查外包装没有任何破损后&#…

城市道路工程设计技术措施

为在城市道路工程建设中正确执行国家和行业有关法律、标准、规范和规程,提高工程建设质量,特制定《城市道路工程设计技术规程》(2011年版)专门编的。  本办法主要依据国家和行业有关法规、标准、规范和规程等,参照地…

Spring 是什么框架?

对于一门技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那在说Spring这三点之前,我们先看Spring之前要学什么。 Java基础、Java语法进阶、MySQL基础操作、MySQL数据库设计和多表操作、JDBC、Maven基础、MyBatis、HMLCSS、JavaScrip…

字节跳动做了3年软件测试,五月无情被辞,想给划水的兄弟提个醒

前言 先简单交代一下背景吧,某不知名 985 的本硕,20 年毕业加入字节,以“人员优化”的名义无情被裁员,之后跳槽到了有赞,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成…

全网最全,Web测试点详细整理(测试场景举例+常见问题分析)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Web测试检查表 功…

go环境安装配置(windows)

下载go 安装包 官网: https://go.dev/dl/ go语言中文网: https://studygolang.com/dl 下载压缩包,解压 环境变量配置 GOROOT 配置你解压的目录 在Path中追加一条 %GOROOT%\bin 这里go对比JAVA还多了一个配置: GOPATH 配置go以…

原生微信小程序基础-分包加载自定义组件项目全流程

小程序基础-分包加载&&自定义组件 小程序分包加载 小程序分包加载-为什么要分包加载 微信平台对小程序单个包的代码体积限制为 2M,超过 2M 的情况下可以采用分包来解决即使小程序代码体积没有超过 2M 时也可以拆分成多个包来实现按需加载配置文件能忽略的…

远程控制电脑软件全方位测评,远程控制工具哪家强

*本文内容以及测试数据来自“B站” 作者:小李student 先问大家一个问题,你心目中最好的远控软件是哪个? 今天我要测评几个有意思的远控软件,他们分别是todesk 、向日葵、RayLink、parsec、其实我还测试了微软自带的远程控制,但…

用 Optaplanner 实现云资源优化:建模详解

引言 装箱问题是一个经典的计算机科学优化问题,它的目标是将一堆物品尽可能地放入一些容器中,以最小化容器数量或最大化容器利用率。在实际应用中,我们可以在物流、资源调度、计算机集群等领域看到装箱问题的应用。 问题描述 在云计算领域,装箱问题同样非常重要。比如,…

Java中关于字符串常量池的详解!!!

字符串常量池 前言1. 直接赋值法,默认从常量池中取对象2. new一个对象3. 字符串常量池、字符串对象、内部的value引用、具体的字符数组之间的关系4. 手动入池方法:intern方法 前言 Java使用 “ ” 称为字符串常量,为了提高程序的运行速度&am…

2023最新软件测试面试题【1000道题含答案】

1、自动化代码中,用到了哪些设计模式? 单例设计模式 工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果,如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化测…

非法收集儿童数据,微软与 2000w 美元和解

文章目录 🤨 非法收集儿童数据,微软与 2000w 美元和解📈 苹果股价和 Vision Pro 一样高涨👮‍♀️ 美国证监会狙击币安和其老板赵长鹏3️⃣ 红杉资本一拆为三😮 加息出乎意料!澳洲央行对抗通胀&#x1f91c…

硬核拆解 | 拓尔微65W 2C1A氮化镓多口快充

随着身边智能设备的增多,一个充电头对应一个设备,出门需要携带多个充电器已经成为日常,有时还会忘带匹配的充电头,无法充电造成困扰...... 多口快充的出现解决了这一难题,出门仅需携带一个充电头,减轻背包…

AI智慧安监平台EasyCVR新版本v3.3如何接入V1版智能分析网关硬件?

EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流…

VFP发送公众号模板消息

公众号模板消息向用户发送重要的服务通知,比如验证码,消费通知,比如时间提醒什么的。 调用代码很简单 *--发送模板消息TEXT TO msgJson NOSHOW TEXTMERGE {"touser":"oljsK6OgHA9ftJxuCUWg7cFylj6Y","template_id&…