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实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python中特殊函数集锦
Jul 27 Python
python 第三方库的安装及pip的使用详解
May 11 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
python实现ID3决策树算法
Aug 29 Python
Django unittest 设置跳过某些case的方法
Dec 26 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python中web框架的自定义创建
Sep 08 Python
基于python实现学生信息管理系统
Nov 22 Python
PyTorch中反卷积的用法详解
Dec 30 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
Python基于字典实现switch case函数调用
Jul 22 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截取后台登陆密码的代码
2012/05/05 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
php常用的工具开发整理
2019/09/26 PHP
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
python简单实现获取当前时间
2016/08/27 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python实现井字棋小游戏
2020/03/09 Python
django form和field具体方法和属性说明
2020/07/09 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
python openpyxl模块的使用详解
2021/02/25 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
高中自我评价范文
2014/01/27 职场文书
财务会计岗位职责
2015/02/03 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
CSS的calc函数用法小结
2022/06/25 HTML / CSS