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模块学习 datetime介绍
Aug 27 Python
python使用cPickle模块序列化实例
Sep 25 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
python自动化报告的输出用例详解
May 30 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
Python常用数字处理基本操作汇总
Sep 10 Python
Python模块常用四种安装方式
Oct 20 Python
pytorch学习教程之自定义数据集
Nov 10 Python
Python Flask实现进度条
May 11 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
javascript arguments使用示例
2014/12/16 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
微信小程序点击生成朋友圈分享图(遇到的坑)
2020/06/17 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
Python、Javascript中的闭包比较
2015/02/04 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python实现按中文排序的方法示例
2018/04/25 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
python中数据库like模糊查询方式
2020/03/02 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
应届大学生自荐信格式
2013/09/21 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
素质教育标语
2014/06/27 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android