Python数据分析库Pandas实战:解析Excel数据

简介: Python数据分析库Pandas实战:解析Excel数据

上一节Python操作Excel表格使用的是openpyxl包,这个包虽然能处理简单日常工作中Excel表格数据处理,但面对机器学习庞大的数据,还是显得力不从心,所以openpyxl大多数应用于简单的Excel表格操作,以及机器学习分析后表格的样式优化,但针对于数据的操作运算,我们还是要借助与pandas。


1.安装Pandas


对于直接下载python安装程序的用户来说,pandas包并没有自带安装,所以需要使用Pandas的程序员,需要借助于pip install pandas进行安装。(数据表格与源代码在文章最后下载)

import pandas as pd
df = pd.read_excel('shuju.xlsx')
df['s_date'] = pd.to_datetime(df['s_date'])
df = df.set_index('s_date')
#每月某用户总评论量
x = []
y = []
data = df[df['s_nameId'] == '择城终老'].resample('M')['s_comment'].max().reset_index(drop=False)
for index, row in data.iterrows():
    if pd.isnull(row['s_comment']):
        y.append(0)
    else:
        y.append(row['s_count'])
    x.append(str(row['s_date'].year)[-2:] + str(row['s_date'].month))
print(x)
print(y)


而直接使用anaconda安装python的程序员,可以直接使用pandas包,因为anaconda自带安装了pandas,无需再次安装,推荐使用这种方式进行安装。


2.如何使用Pandas包


对于Pandas来说,首先,我们肯定要先获取Excel文件,才能进行后续的操作以及计算,所以我们需要掌握如何获取到Excel表格中的所有数据,代码如下:

import pandas as pd
df = pd.read_excel('shuju.xlsx')

这里我们先引入了pandas包,并且重新给他起了一个简单的名字pd,然后直接使用pd.read_excel(‘文件路径’),把Excel数据读取进来,我们通过print(df)打印来看看表格中的数据,如图:


26.png


可以看到表格中有3151行数据,这样就能直接输出打印,也就是说,通过上面的调用,就已经获取了所有的数据,并不需要像openpyxl还要获取表,列行等操作。


下面的内容需要借助表数据进行分析,所以我们有必要先看看表格结构,如下图所示,上面是博主爬取花粉俱乐部的些许数据,这里有发帖时间(s_date),发帖人(s_nameId),帖子标题(s_tite),帖子链接(s_url),帖子阅读量(s_count),帖子评论量(s_comment),是否盖章(s_gaizhang),以及该帖子的类型(s_device)。


27.png


获取某用户所有月份的发帖量

假设我现在有一个需求,需要获取某月每个人的发帖量,那么应该怎么操作呢?


既然是每个月,我们肯定要用时间来区分,所以我们需要先格式化时间格式,让pandas能读的懂时间,代码如下:

df['s_date'] = pd.to_datetime(df['s_date'])

这句话的代码就是将该列转换为时间格式,然后重新赋值给该列,这样后续才能用时间来操作。接着我们需要将该时间列设置为索引,代码如下:

df = df.set_index('s_date')

这样设置之后,我们的表格就变成了,如下图所示的样式:


28.png


刚才是数字索引,现在变为时间索引,这样我们就可以用索引进行分类了,既然是统计每月数据,所以应该根据每月进行分类,代码如下:

data = df[df['s_nameId'] == '择城终老'].resample('M').count().reset_index(drop=False)

首先获取所有某用户的数据,比如这里获取“择城终老”的数据,就是df[df['s_nameId']=='择城终老'],获取某人数据,或者某列数值的所有行,都可以这样获取。接着resample('M'),M代码月,根据月进行取样,然后count()统计该月数据和,然后reset_index(drop=False)取消时间作为索引,方便后面获取月份,这样就获取了某个人的所有月份发帖子量,输出如下图所示(print(data)):


29.png


这里可以看到每列都是和运算,所有数据都相同,只要遍历虽然获取某格数据都是一样的,代码如下,比如我要输出走势图,这里X是月,Y是该月帖子总数,代码如下:

x=[]
y=[]
for index, row in data.iterrows():
    y.append(row['s_url'])#获取该月帖子总和数
    x.append(str(row['s_date'].year)[-2:] + str(row['s_date'].month))//获取当前年月

这段代码输出的结果如下,分别输出了Y,与X:


30.png


这里是根据月份获取某人某月总帖子数,那么获取总浏览量呢?其实只只需要将count()总和换成sun()就行,代码如下:

data = df[df['s_nameId'] == self.name_id].resample('M').sum().reset_index(drop=False)
for index, row in data.iterrows():
    y.append(row['s_count'])
    x.append(str(row['s_date'].year)[-2:] + str(row['s_date'].month))

当然这里只能获取row['s_count']不能像统计行数一样统计总和,因为本身就的就是总浏览量,只有数字列才能算总和,而且其他列并不是浏览量,是如下数据:


31.png


其实这里还算出了总评论量,大家只要把row['s_count']换成row['s_comment']就能知道总评论量的数据了。


获取某人某月最大浏览量数据

现在我们又变更了需求,这里我想知道,某个人写的最好的帖子,看的人数最多,或者评论人数最多的帖子是哪个,应该则么做呢?其实这里的代码基本差不多,都需要根据时间索引获取,代码如下:

import pandas as pd
df = pd.read_excel('shuju.xlsx')
df['s_date'] = pd.to_datetime(df['s_date'])
df = df.set_index('s_date')
x = []
y = []
data = df[df['s_nameId'] == '择城终老'].resample('M')['s_count'].max().reset_index(drop=False)
for index, row in data.iterrows():
    if pd.isnull(row['s_count']):
        y.append(0)
    else:
        y.append(row['s_count'])
    x.append(str(row['s_date'].year)[-2:] + str(row['s_date'].month))
print(x)
print(y)


这里除了max()不同外,基本与上面代码相同,但这里有个小问题,假如某人某月没有输出任何帖子,简单来说这个月没有任何数据,他的最大值就是NaN,如下:


32.png


看到索引5的数据了吗,也就是说,2018年5月,该人没有任何数据,那么计算的最大值就是NaN,所以如果你要获取该值做图,或做其他用途,要么跳过,要么给他赋值为0。pd.isnull()就是判断该值是否为NaN的方法。


同样这里获取了浏览量的最大值,我们要获取评论量的最大值,只需要改两行代码:

data = df[df['s_nameId'] == '择城终老'].resample('M')['s_comment'].max().reset_index(drop=False)
if pd.isnull(row['s_comment']):

把代码改一下就可以获取某人某月最大评论量的数据,输出的结果与上面类似,只是将s_count列换成了s_comennt列。


获取某人某月输出占比数据

获取某人某月输出占比数据这个需求与画饼图有关,就是百分比图,那么我们应该怎么做才能获取到某月所有用户的总数,以及该月所有用户各个输出贴数呢?因为获取到这两个数据才能计算百分比。这里将用到分组,代码如下:

df['s_date'] = pd.to_datetime(df['s_date'])
df = df.set_index('s_date')
name_df = df.groupby('s_nameId', as_index=False)

这里我们因为要获取某个人的占比图,所以必须先根据用户名进行分组,as_index这个参数只是输出样式,不影响结果,这里是以“SQL风格”的分组输出,当然,我们这里还是需要以时间作为索引,所以还是有前两句代码,下面是输出样式。


33.png


既然已经进行了分组,也就是说每个用户的数据都已经到手,就可以依次遍历某个人的数据,然后统计该人的每月总数数据,总的所有人该月的发帖数,代码如下:

x = []
y = []
for name, group in name_df:
    data = group.resample('M').count().reset_index(drop=False)
    data2 = data[data['s_date'] == '2018-01-31']
    if len(data2.values.tolist()) <= 0 or data2.values.tolist()[0][3] <= 0:
        continue
    else:
        x.append(data2.values.tolist()[0][3])
        y.append(name)
print(x)
print(y)

这里我们遍历了刚才的分组,获得了某个用户的name,group,name就是name_id,group是该用户的所有数据。具体的name_id与group数据如下图所示:


34.png


然后通过月份统计出该每月的总数data,然后根据索引月份获取该月的数据,同时如果该月该用户没有数据,选择不统计,跳过,只统计有数据的,这里data2是一个表DataFrame,我们需要将他转化为ndArray然后转换为list后,在获取数据,看看输出的X,Y的数据,如下:


35.png


上面的数据就是2018年1月每个人输出的帖子数,其实饼图并不需要计算百分比,你只需要把上面数据输入到饼图中,会自动计算百分比的,也就是matplotlib包的pie图。


本文源代码Github下载地址:点击下载

相关文章
|
8月前
|
机器学习/深度学习 JSON Java
Java调用Python的5种实用方案:从简单到进阶的全场景解析
在机器学习与大数据融合背景下,Java与Python协同开发成为企业常见需求。本文通过真实案例解析5种主流调用方案,涵盖脚本调用到微服务架构,助力开发者根据业务场景选择最优方案,提升开发效率与系统性能。
1818 0
|
7月前
|
人工智能 Java Linux
Python高效实现Excel转PDF:无Office依赖的轻量化方案
本文介绍无Office依赖的Python方案,利用Spire.XLS、python-office、Aspose.Cells等库实现Excel与PDF高效互转。支持跨平台部署、批量处理、格式精准控制,适用于服务器环境及自动化办公场景,提升转换效率与系统稳定性。
738 7
|
8月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
397 2
|
7月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
908 0
|
8月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
1978 0
|
7月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
636 0
|
7月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
8月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
1093 4
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
363 2

推荐镜像

更多