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列表去重的二种方法
Feb 14 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python学生管理系统
Jan 30 Python
python中时间模块的基本使用教程
May 14 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
详解python对象之间的交互
Sep 29 Python
python单元测试框架pytest的使用示例
Oct 07 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
vue新建项目并配置标准路由过程解析
2019/12/09 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python内存管理实例分析
2019/07/10 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
高级工程师英文求职信
2014/03/19 职场文书
节能环保标语
2014/06/12 职场文书
供用电专业求职信
2014/07/07 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
硕士学位论文评语
2014/12/31 职场文书
2015年维修工作总结
2015/04/25 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
vue动态绑定style样式
2022/04/20 Vue.js