用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 的相关文章

  • 无法将 datetime.datetime 与 datetime.date 进行比较

    我有以下代码并收到上述错误 由于我是 python 新手 我无法理解这里的语法以及如何修复错误 if not start or date lt start start date 有一个datetime date 从日期时间转换为日期的方法
  • Pytest:如何使用从夹具返回的列表来参数化测试?

    我想使用由固定装置动态创建的列表来参数化测试 如下所示 pytest fixture def my list returning fixture depends on other fixtures return a dynamically
  • 无法将较大的 blob 上传到 Azure:azure.core.exceptions.ServiceRequestError:操作未完成(写入)(_ssl.c:2317)

    我正在尝试使用 Python SDK 将一些较大的 blob gt 50MB 上传到我的 Azure 存储容器 connect str os environ AZURE STORAGE CONNECTION STRING blob serv
  • 返回不包括指定键的字典副本

    我想创建一个函数 返回字典的副本 不包括列表中指定的键 考虑这本词典 my dict keyA 1 keyB 2 keyC 3 致电without keys my dict keyB keyC 应该返回 keyA 1 我想用一行简洁的字典理
  • 无法安装时间模块

    我试过了pip install time and sudo H pip install time 但我不断收到错误 找不到满足要求时间的版本 从 版本 未找到时间匹配的发行版 我正在 PyCharm 中工作 但真正没有意义的是我可以在 Py
  • 使用 Python 中的 IAM 角色访问 AWS API Gateway

    我有一个 AWS API 网关 我想使用它来保护其安全IAM 角色 http docs aws amazon com apigateway latest developerguide permissions html 我正在寻找一个包来帮助
  • 将具有不同大小的行的数据加载到 Numpy 数组中

    假设我有一个包含如下数据的文本文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 如何将它加载到 numpy 数组中 使其看起来像这样 1 2 3 4 5 0 6 7 8 0 0 0 9 1
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • 如何使用to_sql将pandas数据帧写入oracle数据库?

    我是一个新的oracle学习者 我正在尝试将 pandas 数据帧写入 oracle 表中 经过网上研究 我发现代码本身很简单 但我不知道为什么我的代码不起作用 我已经从本地文件中读取了 pandas 数据框 import cx Oracl
  • 将参数传递给 __enter__

    刚刚学习 with 语句尤其是这篇文章 http effbot org zone python with statement htm 问题是 我可以传递一个参数给 enter 我有这样的代码 class clippy runner def
  • 向伪 shell (pty) 发出命令

    我尝试使用 subprocess popen os spawn 来运行进程 但似乎需要伪终端 import pty master slave pty openpty os write master ls l 应该发送 ls l 到从属终端
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • scrapy python 请求未定义

    我在这里找到了答案 code for site in sites Link site xpath a href extract CompleteLink urlparse urljoin response url Link yield Re
  • Python“self”关键字[重复]

    这个问题在这里已经有答案了 我是 Python 新手 通常使用 C 最近几天开始使用它 在类中 是否需要在对该类的数据成员和方法的任何调用前添加前缀 因此 如果我在该类中调用方法或从该类获取值 我需要使用self method or sel
  • 获取运行云功能的运行时服务帐户

    有没有办法以编程方式从云功能获取运行时服务帐户的电子邮件 我知道我可以 猜测 默认的 App Engine 帐户 因为它始终是 appspot gserviceaccount com 但这不是我想要的 我本来期待有一些环境变量 https
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm
  • 如何将 Pandas Dataframe 中的字符串转换为字符列表或数组?

    我有一个名为的数据框data 其中一列包含字符串 我想从字符串中提取字符 因为我的目标是对它们进行一次性编码并使之可用于分类 包含字符串的列存储在预测因子如下 predictors pd DataFrame data columns Seq
  • 从 Flask 中的 S3 返回 PDF

    我正在尝试在 Flask 应用程序的浏览器中返回 PDF 我使用 AWS S3 来存储文件 并使用 boto3 作为与 S3 交互的 SDK 到目前为止我的代码是 s3 boto3 resource s3 aws access key id

随机推荐

  • 第一篇: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更强大