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判断IP地址合法性的方法实例
Mar 13 Python
python 默认参数问题的陷阱
Feb 29 Python
python实现拓扑排序的基本教程
Mar 11 Python
python 常用的基础函数
Jul 10 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
Python中的引用知识点总结
May 20 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
基于Python正确读取资源文件
Sep 14 Python
Python os库常用操作代码汇总
Nov 03 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 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
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
Python 文件管理实例详解
2015/11/10 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
Django组件content-type使用方法详解
2019/07/19 Python
Python类的动态绑定实现原理
2020/03/21 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
博士学位自我鉴定范文
2013/12/26 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
晶体管单管来复再生式收音机
2021/04/22 无线电
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers