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地址所在地
Mar 29 Python
使用PDB模式调试Python程序介绍
Apr 05 Python
Python实现的Excel文件读写类
Jul 30 Python
PyGame贪吃蛇的实现代码示例
Nov 21 Python
pandas ix &iloc &loc的区别
Jan 10 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
django修改models重建数据库的操作
Mar 31 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
浅谈Python中的继承
Jun 19 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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打印输出棋盘的实现方法
2014/12/23 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
javascript 函数声明与函数表达式的区别介绍
2013/10/05 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
JavaScript实现打砖块游戏
2020/02/25 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
python 公共方法汇总解析
2019/09/16 Python
python链表类中获取元素实例方法
2021/02/23 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
师德个人剖析材料
2014/02/02 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
上班迟到检讨书
2014/09/15 职场文书
就业协议书范本
2014/10/08 职场文书
海上钢琴师观后感
2015/06/03 职场文书
学校隐患排查制度
2015/08/05 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
html粘性页脚的具体使用
2022/01/18 HTML / CSS