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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
使用python绘制常用的图表
Aug 27 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
Win10环境python3.7安装dlib模块趟过的坑
Aug 01 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python @propert装饰器使用方法原理解析
Dec 25 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 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实现一个多功能购物网站的案例
2017/09/13 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
js实现年月日表单三级联动
2020/04/17 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
python爬虫添加请求头代码实例
2019/12/28 Python
美国最大的半成品净菜电商:Blue Apron(蓝围裙)
2018/04/27 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
linux面试题参考答案(1)
2016/01/22 面试题
药学专业个人自我评价
2013/11/11 职场文书
西式婚礼证婚词
2014/01/12 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
水电工岗位职责
2014/02/12 职场文书
法学专业求职信
2014/07/15 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
倡议书的格式写法
2015/04/28 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
python实现MD5进行文件去重的示例代码
2021/07/09 Python
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS