目录

介绍

透视Pandas DataFrame

在Pandas DataFrame中对数据进行分组

总结


使用我们的数据集后,我们将快速查看可以使用流行的Python库从数据集轻松创建的可视化,然后逐步介绍一个可视化示例。

  • 下载CSV和数据库文件-127.8 KB
  • 下载源代码122.4 KB

介绍

本文是使用PythonPandas进行数据清理系列的一部分。它旨在利用数据科学工具和技术来使开发人员快速启动并运行。

如果您想查看本系列的其他文章,可以在这里找到它们:

  • 第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中重塑数据相关推荐

  1. 清理Pandas DataFrame中的数据

    目录 介绍 清理按键 查找不一致的数据 总结 确保整个DataFrame一致是很重要的.这包括确保数据的类型正确,消除不一致之处并标准化值. 下载CSV和数据库文件-127.8 KB 下载源代码122 ...

  2. pandas基于dataframe字符串数据列不包含特定字符串来筛选dataframe中的数据行(rows where values do not contain substring)

    pandas基于dataframe字符串数据列不包含(not contains)特定字符串来筛选dataframe中的数据行(rows where values do not contain subs ...

  3. pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list

    pandas使用np.where函数计算返回dataframe中指定数据列包含缺失值的行索引列表list(index of rows with missing values in dataframe ...

  4. pandas使用itertuples函数迭代dataframe中的数据行并自定义修改行中的数值(update row while iterating over the rows)

    pandas使用itertuples函数迭代dataframe中的数据行并自定义修改行中的数值(update row while iterating over the rows in datafram ...

  5. python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)

    python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD.Median Absolute Devi ...

  6. pandas基于dataframe字符串数据列包含(contains)特定字符串来筛选dataframe中的数据行(rows where values contain substring)

    pandas基于dataframe字符串数据列包含(contains)特定字符串来筛选dataframe中的数据行(rows where values contain substring) 目录

  7. pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )

    pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe ) 目录

  8. pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )

    pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe ) 目录

  9. pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换、替换具体数据列的相关值

    pandas使用replace函数替换dataframe中的值:replace函数对dataframe中指定数据列的值进行替换.替换具体数据列的相关值 目录

最新文章

  1. NIPS 2017论文解读 | 基于对比学习的Image Captioning
  2. BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
  3. 设计爬虫Hawk背后的故事
  4. 什么是ActiveMQ?
  5. 判4年!旷视科技司机敲诈董事长300万元未遂
  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-3.热部署在Eclipse和IDE里面的使用...
  7. 职业生涯(一)——你就是自己想要成为的那个人!
  8. 【转】余弦相似度及基于python的三种代码实现、与欧氏距离的区别
  9. 预付费客户抄表管理系统的应用
  10. 能上QQ不能上网的解决方法
  11. 厦门八大美院墙绘 茶馆里的中国风墙绘壁画
  12. 2021年全球天然橡胶行业供需现状分析:需求量迎来恢复性增长,中国市场需求量占比超40%[图]
  13. SVN更新出错 提示:working copy XXX locked
  14. firefox上传文件
  15. PostgreSQL row number
  16. Android 10开启调试模式
  17. codeforces1407C Chocolate Bunny
  18. 《大学章句集注》-读书笔记之一
  19. 送快递的,收快递的电话
  20. mysql 去除微秒_MySQL 关于毫秒和微秒的处理,MySQL获取毫秒!

热门文章

  1. mmu计算机组成原理,计算机组成原理
  2. php 重载进程,关于php-fpm与nginx进程重载
  3. flask websocket json_Win10环境下使用Flask配合Celery异步推送实时/定时消息/2020年最新攻略...
  4. 古风手机壁纸,国潮的你不可错过!
  5. 设计灵感|展览海报的设计没有头绪?
  6. lambert(兰伯特)投影 应用工具_全息投影技术,在哪些场地可以用到
  7. 微博html怎么编辑器,类似新浪微博的编辑器 输入@就出现可选的下拉框 是怎么实现的...
  8. java设置框架位置_怎样设置label的位置啊?求指导
  9. Linux内核workqueue
  10. maven+springboot整合mybatis(十二)