Python学习笔记:pandas爆炸函数之explode

一、介绍

通过 explode 可以实现列转行的功能。

explode 这个爆炸方法只能处理列表、元组、Series等类型。

二、实操

# 创建测试集
import pandas as pd
df = pd.DataFrame({'Name':['吕布','貂蝉','赵云'],
                   'Hobby':[['打篮球','玩游戏','喝奶茶'],['敲代码','看电影'],['听音乐','健身']]})
'''
  Name            Hobby
0   吕布  [打篮球, 玩游戏, 喝奶茶]
1   貂蝉       [敲代码, 看电影]
2   赵云        [听音乐, 健身]
'''

# 原地爆炸!!!
df.explode('Hobby')

# 列表有重复值 可能存在重复行
df.explode('Hobby').drop_duplicates().reset_index(drop=True)
'''
  Name Hobby
0   吕布   打篮球
1   吕布   玩游戏
2   吕布   喝奶茶
3   貂蝉   敲代码
4   貂蝉   看电影
5   赵云   听音乐
6   赵云    健身
'''

如果数据框中数据为非可爆炸的类型,则可提前进行分列操作。

df2 = pd.DataFrame({'Name':['吕布','貂蝉','赵云'],
                   'Hobby':['打篮球,玩游戏,喝奶茶','敲代码,看电影','听音乐,健身']})
    
df2.explode('Hobby') # Not Work
df2['Hobby2'] = df2['Hobby'].str.split(',')
# df2['Hobby2'] = df2['Hobby'].apply(lambda x: x.split(','))
df2.explode('Hobby2')
'''
  Name        Hobby Hobby2
0   吕布  打篮球,玩游戏,喝奶茶    打篮球
0   吕布  打篮球,玩游戏,喝奶茶    玩游戏
0   吕布  打篮球,玩游戏,喝奶茶    喝奶茶
1   貂蝉      敲代码,看电影    敲代码
1   貂蝉      敲代码,看电影    看电影
2   赵云       听音乐,健身    听音乐
2   赵云       听音乐,健身     健身
'''

三、实践题

  • 列转行拆分爆炸
import pandas as pd
import numpy as np

df = pd.read_excel(r'C:\Users\Hider\Desktop\data.xlsx')

'''
   年级        姓名
0   1  A1;B1;C1
1   2  A2;B2;C2
2   3  A3;B3;C3
3   4  A4;B4;C4
4   5  A5;B5;C5
5   6  A6;B6;C6
6   7  A7;B7;C7
7   8  A8;B8;C8
8   9  A9;B9;C9
'''
df.columns # Index(['年级', '姓名'], dtype='object')
df['新列'] = df['姓名'].str.split(';')
df1 = df.explode('新列')
  • 还原
# 数据还原
def func(df):
    x = ','.join(df.values)
    return x

df2 = df1.groupby('年级').agg(func).reset_index()

参考链接:pandas100个骚操作五:使用 explode 实现 pandas 列转行的 2 个常用技巧

参考链接:python pandas包的爆炸函数explode

参考链接:pandas.DataFrame.explode

posted @   Hider1214  阅读(3146)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示