pandas dataframe 中的explode函数用法详解


Posted in Python onMay 18, 2020

在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数。

这个函数如下:

Code

# !/usr/bin/env python
# -*- coding:utf-8 -*-
# create on 18/4/13
import pandas as pd

def dataframe_explode(dataframe, fieldname): 
 temp_fieldname = fieldname + '_made_tuple_' 
 dataframe[temp_fieldname] = dataframe[fieldname].apply(tuple)  
 list_of_dataframes = []
 for values in dataframe[temp_fieldname].unique().tolist(): 
  list_of_dataframes.append(pd.DataFrame({
   temp_fieldname: [values] * len(values), 
   fieldname: list(values), 
  }))
 dataframe = dataframe[list(set(dataframe.columns) - set([fieldname]))].merge(pd.concat(list_of_dataframes), how='left', on=temp_fieldname) 
 del dataframe[temp_fieldname]
 return dataframe

df = pd.DataFrame({'listcol':[[1,2,3],[4,5,6]], "aa": [222,333]})
df = dataframe_explode(df, "listcol")

Description

将 dataframe 按照某一指定列进行展开,使得原来的每一行展开成一行或多行。( 注:该列可迭代, 例如list, tuple, set)

补充知识:Pandas列中的字典/列表拆分为单独的列

我就废话不多说了,大家还是直接看代码吧

[1] df
Station ID  Pollutants
8809   {"a": "46", "b": "3", "c": "12"}
8810   {"a": "36", "b": "5", "c": "8"}
8811   {"b": "2", "c": "7"}
8812   {"c": "11"}
8813   {"a": "82", "c": "15"}

Method 1:

step 1: convert the Pollutants column to Pandas dataframe series

df_pol_ps = data_df['Pollutants'].apply(pd.Series)

df_pol_ps:
 a b c
0 46 3 12
1 36 5 8
2 NaN 2 7
3 NaN NaN 11
4 82 NaN 15

step 2: concat columns a, b, c and drop/remove the Pollutants

df_final = pd.concat([df, df_pol_ps], axis = 1).drop('Pollutants', axis = 1)

df_final:
 StationID a b c
0 8809 46 3 12
1 8810 36 5 8
2 8811 NaN 2 7
3 8812 NaN NaN 11
4 8813 82 NaN 15

Method 2:

df_final = pd.concat([df, df['Pollutants'].apply(pd.Series)], axis = 1).drop('Pollutants', axis = 1)

df_final:
 StationID a b c
0 8809 46 3 12
1 8810 36 5 8
2 8811 NaN 2 7
3 8812 NaN NaN 11
4 8813 82 NaN 15

以上这篇pandas dataframe 中的explode函数用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的重启关机程序实例
Aug 21 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
Python实现的单向循环链表功能示例
Nov 10 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
python画双y轴图像的示例代码
Jul 07 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python实现高效的遗传算法
Apr 07 Python
python 如何做一个识别率百分百的OCR
May 29 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 #Python
Win 10下Anaconda虚拟环境的教程
May 18 #Python
python异常处理之try finally不报错的原因
May 18 #Python
Pandas实现一列数据分隔为两列
May 18 #Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 #Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 #Python
DjangoWeb使用Datatable进行后端分页的实现
May 18 #Python
You might like
php错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
深入分析PHP引用(&)
2014/09/04 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
js DOM模型操作
2009/12/28 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
Javascript window对象详解
2014/11/12 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JavaScript操作Cookie方法实例分析
2015/05/27 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
党员的自我评价范文
2014/01/02 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
优秀新员工事迹材料
2019/05/13 职场文书