在Pandas DataFrame中重塑数据
目录
介绍
透视Pandas DataFrame
在Pandas DataFrame中对数据进行分组
总结
使用我们的数据集后,我们将快速查看可以使用流行的Python库从数据集轻松创建的可视化,然后逐步介绍一个可视化示例。
- 下载CSV和数据库文件-127.8 KB
- 下载源代码122.4 KB
介绍
本文是使用Python和Pandas进行数据清理系列的一部分。它旨在利用数据科学工具和技术来使开发人员快速启动并运行。
如果您想查看本系列的其他文章,可以在这里找到它们:
- 第1部分-介绍Jupyter和Pandas
- 第2部分-将CSV和SQL数据加载到Pandas中
- 第3部分-纠正Pandas中的缺失数据
- 第4部分-合并Pandas中的多个数据集
- 第5部分-清理Pandas DataFrame中的数据
- 第6部分-重塑Pandas DataFrame中的数据
- 第7部分-使用Seaborn和Pandas进行数据可视化
有时,即使清理完数据集后,有时仍然需要重塑Pandas DataFrame以充分利用数据。重塑是操纵表结构以形成不同的数据集时使用的术语,例如将“宽”数据表设置为“长”。
如果您使用过Excel中的数据透视表或许多关系数据库中内置的数据透视和交叉表支持,那么您会感到熟悉这一点。
例如,上面的表格(来自Pandas文档)已通过透视、堆叠或拆开表格进行了调整。
- pivot方法采用具有多个索引的大型数据集并将其汇总
- stack方法采用具有多个索引的表并将其分组
- unstack方法采用具有多个唯一列的表并将其取消分组
在此阶段,我们将研究多种方法来使用Pandas重塑数据。我们将看到如何使用数据帧的透视和堆栈来获取数据的不同图片。
请注意,我们已经使用该系列模块的源数据文件创建了完整的Jupyter Notebook,您可以在本文头部下载和安装。
透视Pandas DataFrame
借助Pandas,我们可以使用pivot函数从现有的框架创建一个新的DataFrame。目前,我们的表已按购买ID创建索引,但让我们将之前创建的combinedData表转换为更有趣的表。
首先,让我们尝试以下pivot方法,方法是启动一个新的代码块并添加:
productsByState = combinedData.pivot(index='product_id', columns='company', values='paid')
结果看起来像这样:
运行此命令会产生重复的索引错误,pivot仅适用于具有唯一键的DataFrame。
但是还有另一种方法可以使我们得到解决这个问题的方法。pivot_table的工作原理与数据透视类似,但它会汇总重复的值而不产生错误。
- pivot_table方法需要一个大数据集,并通过汇总重复项对其进行汇总
让我们将此方法与默认值一起使用:
productsByState = combinedData.pivot_table(index=['product_id', 'product'], columns='state', values='paid')
您可以在此处查看结果:
这将生成一个DataFrame,其中包含产品列表以及各列中每个状态的平均值。这并不是真的那么有用,所以让我们更改聚合方法:
reshapedData = combinedData.pivot_table(index=['product_id', 'product'], columns='state', values='paid', aggfunc=np.sum)
reshapedData = reshapedData.fillna(0)
print(reshapedData.head(10))
现在,这将生成一张产品表,其中包含各州所有这些产品的销售总额。此方法的第二行还将删除NaN值,并将其替换为0,因为假定该产品在该状态下没有销售。
在Pandas DataFrame中对数据进行分组
我们将看到的另一种重塑活动是将数据元素分组在一起。让我们回到原始的大型DataFrame并创建一个将单个客户的交易分组在一起的新DataFrame。
- groupby方法采用大型数据集并按列值分组
启动一个新的代码块并添加:
volumesData = combinedData.groupby(by='customer_id') print(volumesData.head(10))
结果如下:
看起来并没有真正做任何事情,因为我们的DataFrame是在purchase_id上建立索引的。
让我们添加一个汇总函数来汇总数据,以便我们的分组按预期进行:
volumesData = combinedData.groupby(by='customer_id').sum()
print(volumesData.head(10))
再次,这是结果:
这会按照我们期望的方式对数据集进行分组,但是我们似乎缺少了一些列并且purchase_id没有任何意义,因此让我们扩展groupby方法并修剪该purchase_id列:
volumesData = combinedData.groupby(by=['customer_id','first_name','last_name','product_id','product']).sum()
volumesData.drop(columns='purchase_id', inplace=True)
print(volumesData.head(10))
这是我们的新结果:
最终结果看起来不错,使我们对客户正在购买的商品、金额以及支付的金额有一个很好的了解。
最后,我们将对groupby数据集进行另一项更改。添加以下内容以创建每个状态的总计DataFrame:
totalsData = combinedData.groupby(by='state').sum().reset_index()
totalsData.drop(columns=['purchase_id','customer_id','product_id'], inplace=True)
这里的关键变化是我们在reset_index方法之后添加了一个sum方法。这是为了确保生成的DataFrame对于我们的可视化工作具有可用的索引。
总结
我们采用了完整、干净的数据集,并以几种不同的方式对其进行了调整,以使我们对数据有更多的了解。
接下来,我们将看一下可视化,看看它们如何成为展示我们的数据并确保结果干净的重要工具。
在Pandas DataFrame中重塑数据相关推荐
- 清理Pandas DataFrame中的数据
目录 介绍 清理按键 查找不一致的数据 总结 确保整个DataFrame一致是很重要的.这包括确保数据的类型正确,消除不一致之处并标准化值. 下载CSV和数据库文件-127.8 KB 下载源代码122 ...
- pandas基于dataframe字符串数据列不包含特定字符串来筛选dataframe中的数据行(rows where values do not contain substring)
pandas基于dataframe字符串数据列不包含(not contains)特定字符串来筛选dataframe中的数据行(rows where values do not contain subs ...
- pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list
pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list(index of rows with missing values in dataframe ...
- pandas使用itertuples函数迭代dataframe中的数据行并自定义修改行中的数值(update row while iterating over the rows)
pandas使用itertuples函数迭代dataframe中的数据行并自定义修改行中的数值(update row while iterating over the rows in datafram ...
- python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)
python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD.Median Absolute Devi ...
- pandas基于dataframe字符串数据列包含(contains)特定字符串来筛选dataframe中的数据行(rows where values contain substring)
pandas基于dataframe字符串数据列包含(contains)特定字符串来筛选dataframe中的数据行(rows where values contain substring) 目录
- pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )
pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe ) 目录
- pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )
pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe ) 目录
- pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换、替换具体数据列的相关值
pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换.替换具体数据列的相关值 目录
最新文章
- NIPS 2017论文解读 | 基于对比学习的Image Captioning
- BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
- 设计爬虫Hawk背后的故事
- 什么是ActiveMQ?
- 判4年!旷视科技司机敲诈董事长300万元未遂
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-3.热部署在Eclipse和IDE里面的使用...
- 职业生涯(一)——你就是自己想要成为的那个人!
- 【转】余弦相似度及基于python的三种代码实现、与欧氏距离的区别
- 预付费客户抄表管理系统的应用
- 能上QQ不能上网的解决方法
- 厦门八大美院墙绘 茶馆里的中国风墙绘壁画
- 2021年全球天然橡胶行业供需现状分析:需求量迎来恢复性增长,中国市场需求量占比超40%[图]
- SVN更新出错 提示:working copy XXX locked
- firefox上传文件
- PostgreSQL row number
- Android 10开启调试模式
- codeforces1407C Chocolate Bunny
- 《大学章句集注》-读书笔记之一
- 送快递的,收快递的电话
- mysql 去除微秒_MySQL 关于毫秒和微秒的处理,MySQL获取毫秒!
热门文章
- mmu计算机组成原理,计算机组成原理
- php 重载进程,关于php-fpm与nginx进程重载
- flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...
- 古风手机壁纸,国潮的你不可错过!
- 设计灵感|展览海报的设计没有头绪?
- lambert(兰伯特)投影 应用工具_全息投影技术,在哪些场地可以用到
- 微博html怎么编辑器,类似新浪微博的编辑器 输入@就出现可选的下拉框 是怎么实现的...
- java设置框架位置_怎样设置label的位置啊?求指导
- Linux内核workqueue
- maven+springboot整合mybatis(十二)