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月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1033 7
|
9月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
9月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
813 0
|
9月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
799 0
|
9月前
|
Java 数据处理 索引
(Pandas)Python做数据处理必选框架之一!(二):附带案例分析;刨析DataFrame结构和其属性;学会访问具体元素;判断元素是否存在;元素求和、求标准值、方差、去重、删除、排序...
DataFrame结构 每一列都属于Series类型,不同列之间数据类型可以不一样,但同一列的值类型必须一致。 DataFrame拥有一个总的 idx记录列,该列记录了每一行的索引 在DataFrame中,若列之间的元素个数不匹配,且使用Series填充时,在DataFrame里空值会显示为NaN;当列之间元素个数不匹配,并且不使用Series填充,会报错。在指定了index 属性显示情况下,会按照index的位置进行排序,默认是 [0,1,2,3,...] 从0索引开始正序排序行。
678 0
|
9月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
749 0
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
477 1
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
481 0
|
11月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
844 0
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
447 2

热门文章

最新文章

推荐镜像

更多