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中使用支持向量机(SVM)算法
Dec 26 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
python实现汉诺塔算法
Mar 01 Python
Python 20行简单实现有道在线翻译的详解
May 15 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
Aug 18 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python word文本自动化操作实现方法解析
Nov 05 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快递单号查询接口使用示例
2014/05/05 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
2015/10/20 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python heapq使用详解及实例代码
2017/01/25 Python
python自动12306抢票软件实现代码
2018/02/24 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python扫描线填充算法详解
2020/02/19 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
vivo智能手机官方商城:vivo
2016/09/22 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
初二学习计划书范文
2014/04/27 职场文书
金融专业求职信
2014/08/05 职场文书
给老师的一封感谢信
2015/01/20 职场文书
财务个人年度总结范文
2015/02/26 职场文书
酒店前台岗位职责
2015/04/16 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript