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 个常用技巧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)