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实现扫描端口示例
Mar 29 Python
python机器学习之决策树分类详解
Dec 20 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
解读python logging模块的使用方法
Apr 17 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
Djang的model创建的字段和参数详解
Jul 27 Python
Python实现把类当做字典来访问
Dec 16 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
Django路由层如何获取正确的url
Jul 15 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 如何向 MySQL 发送数据
2006/10/09 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
javascript 函数及作用域总结介绍
2013/11/12 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
python如何将图片转换为字符图片
2020/08/19 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python实现自主查询实时天气
2018/06/22 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
奶茶专卖店创业计划书
2014/01/18 职场文书
学用政策心得体会
2014/09/10 职场文书
模范教师材料大全
2014/12/16 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Java使用JMeter进行高并发测试
2021/11/23 Java/Android