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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
Python实现的使用telnet登陆聊天室实例
Jun 17 Python
实例讲解Python的函数闭包使用中应注意的问题
Jun 20 Python
Python与R语言的简要对比
Nov 14 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
Python构建图像分类识别器的方法
Jan 12 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
Python turtle实现贪吃蛇游戏
Jun 18 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的面试题集
2006/11/19 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
CentOS安装php v8js教程
2015/02/26 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
Js 冒泡事件阻止实现代码
2013/01/27 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
12个非常实用的JavaScript小技巧【推荐】
2016/05/18 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
浅谈python出错时traceback的解读
2020/07/15 Python
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
学生上课看漫画的检讨书
2014/09/26 职场文书
Java实现带图形界面的聊天程序
2022/06/10 Java/Android