用Python进行数据分析——Numpy与Pandas

2023-11-19

Numpy与Pandas是进行数据分析最常用的包。其中,Numpy(Numerical Python)是用来处理矩阵运算的,其运算效率高于列表;Pandas则是基于Numpy的数据分析工具,其能更方便地操作大型数据集,功能比Numpy更强大。

一、Numpy

由于Numpy包是第三方工具,因此每次使用前必须在代码中导入,其格式如下。其中,np为Numpy包约定俗成的简写,以便在后续程序中引用。

img

Numpy中用array函数可创建一维或多维数组(矩阵),与列表类似,其索引从0开始,可用切片的方式来访问数组(矩阵)中的数值。

值得注意的是:array内部的元素必须为相同的类型。

img

img

除上述基础操作外,Numpy还有实现数据的统计与向量加减等功能。但总体而言,Numpy可视作列表功能的扩展与延伸,其比列表更高效。后面将重点介绍作为主要数据分析工具的Pandas。

二、Pandas

Pandas有两个主要的数据结构:Series和DataFrame(须区分大小写)。

  • Series

Series用于创建一维数组,由一组数据和数据索引组成。数据索引是Pandas区别于Numpy的重要特征。不同于Array或列表,Series的索引不一定从0开始,它可以被定义,在Series创建的一位数组可通过定义的索引来获取值。

img

  • DataFrame

DataFrame是一个表格型的数据结构,它含有不同的列,每列都可以是不同的数据类型。类似一张excel表格或者SQL,其功能更强大。

定义DataFrame最常用的方法是导入一个字典。其中,DataFrame将字典的key作为列索引,可自行定义,而行索引则是从0开始定义。

img

通过行列索引即可获取DataFrame中的各数值。

img

三、用Pandas进行数据分析

除了导入字典以外,还可通过直接读取Excel文件来定义DataFrame。

img

在读取了待分析的数据表格后,就可对其进行数据分析。但在数据分析之前还有一个很重要的步骤:数据清洗。即:把读取到的原始数据,通过截取、重命名、类型转换、排序以及缺失/异常值处理等操作,转化为适合进行分析的干净、准确的数据形式。

img

现结合一个医院销售数据分析的具体项目,通过如下代码展现数据清洗的基本操作。

import pandas as pd
#导入Pandas,并简写为pd

'''数据清洗'''

#读取原始数据表格
fileNameStr = 'C:\houzi\医院销售数据.xlsx'
salesDf = pd.read_excel(fileNameStr,sheet_name='Sheet1',dtype=str)


#将表格中的“购药时间”重命名为“销售时间”
colNameDict = {'购药时间':'销售时间'}
salesDf.rename(columns=colNameDict,inplace=True)


#删除表格中销售时间或社保卡号缺失的行
salesDf = salesDf.dropna(subset=['销售时间','社保卡号'],how='any')


#将表格中的销售与金额数据转换为浮点数
salesDf['销售数量'] = salesDf['销售数量'].astype('float')
salesDf['应收金额'] = salesDf['应收金额'].astype('float')
salesDf['实收金额'] = salesDf['实收金额'].astype('float')


#定义函数处理“销售时间”中的日期
def splitSaletime(timeColSer):
    timeList=[]
    for value in timeColSer:
        dateStr=value.split(' ')[0]
        timeList.append(dateStr)
        
    timeSer=pd.Series(timeList)
    return timeSer

timeSer = salesDf.loc[:,'销售时间']
dateSer = splitSaletime(timeSer)
salesDf.loc[:,'销售时间'] = dateSer.values

#转换日期格式
salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],
                                    format='%Y-%m-%d', 
                                    errors='coerce')
salesDf = salesDf.dropna(subset=['销售时间','社保卡号'],how='any')


#按销售日期进行升序排列,并重命名行名
salesDf = salesDf.sort_values(by='销售时间',ascending=True)
salesDf = salesDf.reset_index(drop=True)


#删除表格中销售数量异常值
querySer = salesDf.loc[:,'销售数量']>0
salesDf = salesDf.loc[querySer,:]

#打印清洗后的数据表格前6行
salesDf.head(6)

img

原始表格经过清洗后即得到了干净、准确、可读性强且易于分析的数据。对该数据作运算分析就能得到我们想要的信息了,比如月均消费次数、月均消费金额等。

'''数据分析或构建模型'''

#计算消费次数(同一天内、同一人发生的所有消费算作一次消费)
kpi1_Df = salesDf.drop_duplicates(subset=['销售时间','社保卡号'])#删除“销售时间”与“社保卡号”重复的行
totalI = kpi1_Df.shape[0]
print('总消费次数=',totalI)

#计算总消费金额
totalMoney = salesDf.loc[:,'实收金额'].sum()

#计算消费月份数
startTime = kpi1_Df.loc[0,'销售时间']
endTime = kpi1_Df.loc[totalI-1,'销售时间']
daysI=(endTime-startTime).days
monthsI=daysI//30
print('月份数:',monthsI)

#计算月均消费次数
kpi1_I = totalI // monthsI
print('月均消费次数=',kpi1_I)

#计算月均消费金额
monthMoney = totalMoney / monthsI
print('月均消费金额=',monthMoney)

#计算客单价
pct = totalMoney / totalI
print('客单价:',pct)

img

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用Python进行数据分析——Numpy与Pandas 的相关文章

  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 第一篇:PyGame小游戏——2D迷宫游戏(16W字详解)

    目录 在开头的开场白 在CSDN看到一篇 利用深度优先算法自动生成随机迷宫 的blog 突发灵感 就想做这个迷宫游戏 本文大部分讲的意思 而非代码 文章最后会展示最终代码和图片的 读者不用过多地注意那些 本文是作者第一次写blog 难免有些
  • 【Java编程】关于Java的几个基础问题

    关于Java的几个基础问题 String 和 StringBuffer 和 StringBuilder 的异同 相同点 三者在 Java 中都是用来处理字符串的 三个类都被 final 修饰 因此都是不可继承的 StringBuilder
  • 超级等级福利礼包

    文章目录 一 介绍 二 设计等级礼包的目的 1 提升游戏玩家活跃度 2 提升游戏用户吸引力 3 提高游戏用户留存率 4 实现间接收入 5 持续营收 三 玩家心理总结 四 总结该模式的赢利点 五 该模式的应用场景举例 一 介绍 超级等级福利礼
  • 二分查找(C语言版)

    刚刚学到到的知识 掌握的不怎么好 如有不足麻烦留言 第一步 先理清你要查找的数组 最好是有序排序的数组 本人还没学到数组的排序就只能用有序的数组来 int arr 10 1 2 3 4 5 6 7 8 9 10 第二步 计算出该数组的长度
  • MATLAB(1)MATLAB工作环境

    目录 工具栏 当前文件夹窗口 命令行窗口 工作区 文件编辑窗口 图形 Figure x 窗口 本文基于MATLAB R2020b MATLAB刚打开时 一般如下图所示 包括上方的工具栏 左侧的当前文件夹窗口 中间的命令行窗口以及最右侧的工作
  • 考研机试题 -- 字符串、背包、枚举

    目录 首字母大写 字符串 日志排序 字符串 双关键字排序 字符串转换整数 字符串 点菜问题 01背包 神奇的口袋 01背包 计数 整数拆分 完全背包 计数 CCF201512 2 消除类游戏 枚举 首字母大写 字符串 https www n
  • 全球排名第一的免费开源ERP Odoo替代料管理应用解决方案

    本文节选自Odoo亚太金牌服务机构 开源智造 所编写的 ERP真的免费不花钱 Odoo应用指南 如需获取完整的知识内容 请至开源智造官网免费获取 感谢网友一键三连 点赞 转发 收藏 您的支持是我们最大的前进动力 电子行业产品竞争激烈 升级换
  • 【QT学习】实现MVC框架的简易封装(一文读懂)

    文章目录 前言 一 MVC框架简介 1 核心部件 2 使用目的 3 MVC优点 二 具体封装步骤 1 文件管理 2 创建模型 3 创建控制器 4 MVC实现 用户登录验证为例 总结 前言 MVC Model View Controller
  • Spring Boot中的JSON技术

    Spring Boot中的JSON技术 SpringBoot在处理对象的序列化和反序列的时候 底层用的是Jackson 来完成数据到实体类 实体类集合的映射 我们开发会指定 RequestBody ResponseBody 这样的注解 而了
  • java Map集合

    目录 一 介绍 二 HashMap 三 TreeMap 四 LinkedHashMap 一 介绍 Java中的Map是一种键值对的集合数据类型 用于存储无序的 不重复的键值对 它提供了快速的查找和访问功能 可以根据键来获取值 常见的Map实
  • ssh问题集锦

    Linux SSH连接提示 找不到匹配的host key算法 删除 etc ssh ssh host 修改 etc ssh sshd config KexAlgorithms diffie hellman group1 sha1 Ciphe
  • 如何撰写出色的软件专利技术交底书

    目录 目录 1 引言 2 技术交底书的基本要素 2 1 基础信息 2 2 缩略语和关键术语定义 2 3 发明名称 2 4 技术背景 2 5 技术方案 2 6 优点及效益 2 7 技术资料 附件 参考文献 3 准备工作 3 1 前期调研 3
  • OpenWRT初始化备份还原操作步骤

    初始化操作步骤 修改密码 ssh root 192 168 1 1 修改IP 添加网关 添加DNS vim etc config network 关闭dhcp vim etc config dhcp 修改时间 重启网络 service ne
  • 直流电机H桥的三种驱动方式:受限单机模式,单极模式,双极模式

    一 引出 1 简单的开关串联电机只能控制有刷直流电机的启停 要同时控制正反转和转速就要引入H桥式控制电路 2 对4个开关管的控制采用PWM 调节占空比可以实现调速 PWM频率一般在10KHz到20KHz之间 频率太低会导致电机转速过低 噪声
  • 对象作为数据成员

    02 Copyright c 2013 烟台大学计算机学院 04 作 者 马德鹏 05 完成日期 2014 年 4 月 4 日 06 版 本 号 v1 0 07 include
  • “鸿蒙”商标被抢先注册,华为上诉失败,鸿蒙系统将被迫改名?

    作为我国最著名的手机通讯企业之一 华为凭借着无与伦比的创新设计与可靠实用的用户体验 一度成为了国内最受欢迎的手机品牌 此外 华为手机在海外市场的销量也不遑多让 不仅质量优异 在通讯的稳定性与可靠性上 华为手机甚至胜过苹果 但是 因为众所周知
  • C++11中类数据成员初始化方法详解

    C 98为类中提供类成员的初始化列表 类对象的构造顺序是这样的 1 分配内存 调用构造函数时 隐式 显示的初始化各数据成员 2 进入构造函数后在构造函数中执行一般计算 1 类里面的任何成员变量在定义时是不能初始化的 2 一般的数据成员可以在
  • ARoute源码分析之初始化过程

    已在多个项目中使用ARoute实现组件化间的路由通信 但是一直没有很完整的阅读过ARoute框架的源码 刚好这段时间想拜读一些知名框架的源码 那就从熟悉的ARoute开始吧 若有错误的地方欢迎大家指正 本篇博客就从ARoute的初始化流程开
  • Git-第一章:Git概述

    第一章 Git概述 Git 是一个免费的 开源的分布式版本控制系统 可以快速高效地处理从小型到大型的各种 项目 Git 易于学习 占地面积小 性能极快 它具有廉价的本地库 方便的暂存区域和多个工作流分支等特性 其性能优于 Subversio
  • 用Python进行数据分析——Numpy与Pandas

    Numpy与Pandas是进行数据分析最常用的包 其中 Numpy Numerical Python 是用来处理矩阵运算的 其运算效率高于列表 Pandas则是基于Numpy的数据分析工具 其能更方便地操作大型数据集 功能比Numpy更强大