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的内存泄漏及gc模块的使用分析
Jul 16 Python
Python返回真假值(True or False)小技巧
Apr 10 Python
Python内置函数dir详解
Apr 14 Python
详解Python多线程
Nov 14 Python
Python中整数的缓存机制讲解
Feb 16 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
opencv设置采集视频分辨率方式
Dec 10 Python
python用什么编辑器进行项目开发
Jun 17 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
python3.7.2 tkinter entry框限定输入数字的操作
May 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
Zerg兵种介绍
2020/03/14 星际争霸
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
再论Javascript下字符串连接的性能
2011/03/05 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Python实现一个简单的MySQL类
2015/01/07 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
安全承诺书格式
2014/05/21 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
就业推荐表院系意见
2015/06/05 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL