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 的 with 语句详解
Jun 13 Python
Python使用scrapy抓取网站sitemap信息的方法
Apr 08 Python
python实现的简单抽奖系统实例
May 22 Python
Python基于pygame实现图片代替鼠标移动效果
Nov 11 Python
python实现井字棋游戏
Mar 30 Python
Python实现线程状态监测简单示例
Mar 28 Python
python实现批量nii文件转换为png图像
Jul 18 Python
python matplotlib库直方图绘制详解
Aug 10 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
pytorch之inception_v3的实现案例
Jan 06 Python
Python reques接口测试框架实现代码
Jul 28 Python
解决virtualenv -p python3 venv报错的问题
Feb 05 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
PHP4实际应用经验篇(9)
2006/10/09 PHP
可以在线执行PHP代码包装修正版
2008/03/15 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
ThinkPHP 模板substr的截取字符串函数详解
2017/01/09 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
python采用getopt解析命令行输入参数实例
2014/09/30 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
交通事故协议书
2014/04/15 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
增值税发票丢失证明
2015/06/19 职场文书
创业计划书之书店
2019/09/10 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL