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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python中optionParser模块的使用方法实例教程
Aug 29 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
python中返回矩阵的行列方法
Apr 04 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
对django layer弹窗组件的使用详解
Aug 31 Python
PHP统计代码行数的小代码
Sep 19 Python
python实现大学人员管理系统
Oct 25 Python
python之列表推导式的用法
Nov 29 Python
详解python如何引用包package
Jun 07 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
python异步的ASGI与Fast Api实现
Jul 16 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
php实现简单四则运算器
2020/11/29 PHP
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
Python3 操作符重载方法示例
2017/11/23 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
python面试题小结附答案实例代码
2019/04/11 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
介绍一下JMS编程步骤
2015/09/22 面试题
小学英语课后反思
2014/04/26 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
男生贾里读书笔记
2015/06/30 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫