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下载地址:点击下载

相关文章
|
9月前
|
存储 人工智能 测试技术
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
本文介绍如何使用LangChain结合DeepSeek实现多轮对话,测开人员可借此自动生成测试用例,提升自动化测试效率。
2157 125
如何使用LangChain的Python库结合DeepSeek进行多轮次对话?
|
9月前
|
监控 数据可视化 数据挖掘
Python Rich库使用指南:打造更美观的命令行应用
Rich库是Python的终端美化利器,支持彩色文本、智能表格、动态进度条和语法高亮,大幅提升命令行应用的可视化效果与用户体验。
888 0
|
8月前
|
数据可视化 关系型数据库 MySQL
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
本文详解基于Python的电影TOP250数据可视化大屏开发全流程,涵盖爬虫、数据存储、分析及可视化。使用requests+BeautifulSoup爬取数据,pandas存入MySQL,pyecharts实现柱状图、饼图、词云图、散点图等多种图表,并通过Page组件拖拽布局组合成大屏,支持多种主题切换,附完整源码与视频讲解。
840 4
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
|
8月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
605 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
1218 4
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
428 2
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
697 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
1969 4
数据分析的 10 个最佳 Python 库
|
供应链 数据可视化 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛B题的解决方案,涵盖了对产品订单数据的深入分析、多种因素对需求量影响的探讨,并建立了数学模型进行未来需求量的预测,同时提供了Python代码实现和结果可视化的方法。
673 3
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
242 3

推荐镜像

更多