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

原文地址:https://www.cnblogs.com/hider/p/15627064.html