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中的日志模块logging
Jun 19 Python
Python编码爬坑指南(必看)
Jun 10 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
Python实现的购物车功能示例
Feb 11 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
django 连接数据库 sqlite的例子
Aug 14 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
python 中关于pycharm选择运行环境的问题
Oct 31 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
Python 数据可视化之Bokeh详解
Nov 02 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/25 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
javascript Keycode对照表
2009/10/24 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
js实现楼层导航功能
2017/02/23 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
python设置检查点简单实现代码
2014/07/01 Python
详解Python字符串对象的实现
2015/12/24 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
python针对excel的操作技巧
2018/03/13 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
strlen的几种不同实现方法
2013/05/31 面试题
医校毕业生自我鉴定
2014/01/25 职场文书
校园安全演讲稿
2014/05/09 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
环卫工作汇报材料
2014/10/28 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python