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中用pycurl监控http响应时间脚本分享
Feb 02 Python
python基于socket实现网络广播的方法
Apr 29 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
Python基于Socket实现简单聊天室
Feb 17 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
python 模拟登录B站的示例代码
Dec 15 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 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 sprintf()函数用例解析
2011/05/18 PHP
php实现文件编码批量转换
2014/03/10 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
Python中如何导入类示例详解
2019/04/17 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python脚本第一行如何写
2020/08/30 Python
python tkinter实现连连看游戏
2020/11/16 Python
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
节水口号标语
2014/06/19 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
2015年党员自评材料
2014/12/17 职场文书
团委副书记工作总结
2015/08/14 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
MSSQL基本语法操作
2022/04/11 SQL Server