【Pandas驯化-08】一文搞懂Dataframe中一行变多行explode、split中的expand用法

【Pandas驯化-08】一文搞懂Dataframe中一行变多行explode、split中的expand用法
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 相关内容文档获取 微信公众号
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1. 基本介绍

  在Pandas中,explode是一个用于将序列值分解成多行的函数。当DataFrame中的某一列包含序列(如列表或数组),而你希望将这些序列中的每个元素转换为DataFrame的一行时,explode就非常有用。
  真实的数据分析工作中,通过用到explode是和str中的split结合起来用,因此,真实数据中,组成的list大多数为字符串格式,因此,通常需要将字符串转换成列表,然后在将使用explode函数将一列数据转换成多列数据。

💡 2. 使用方法

2.1 explode函数使用

  为了要大家看起来更好的理解explode函数的使用,我们创建一个dataframe,然后将其一列为多个数组的列,转换成多个列。具体如下所示:

import pandas as pd

# 创建包含列表的 DataFrame
df = pd.DataFrame({
    'ID': [1, 2],
    'Values': [['A', 'B', 'C'], ['D', 'E', 'F']]
})

# 显示原始 DataFrame
print("原始 DataFrame:")
print(df)

原始 DataFrame:
   ID Values
0   1    [A, B, C]
1   2    [D, E, F]

  将使用explode将Values列中的每个元素转换为一行:

# 使用 explode 将 Values 列的元素转换为多行
df_exploded = df.explode('Values')

# 显示 explode 后的 DataFrame
print("\nexplode 后的 DataFrame:")
print(df_exploded)

explode 后的 DataFrame:
   ID Values
0   1      A
0   1      B
0   1      C
1   2      D
1   2      E
1   2      F

2.2 split函数使用

  str中的split函数是对一列的字符串安装某个分隔符进行切分,然后将其转换成列表的操作。

import pandas as pd

df = pd.DataFrame({'a':[1,2,3], 'b':[2,3,4], 'c':['a, b,c', 'b,c', 'd,e']})
df['c'] = df['c'].str.split(',')
df

	a	b	c
0	1	2	[a, b, c]
1	2	3	[b, c]
2	3	4	[d, e]

   接着我们可以将上述的安装c列通过explode函数对其进行展开,具体如下:

df.explode('c')
	a	b	c
0	1	2	a
0	1	2	b
0	1	2	c
1	2	3	b
1	2	3	c
2	3	4	d
2	3	4	e

🔍 3. 高阶用法

3.1 explode函数底层解析

  上次的操作直接使用explode函数进行,下面将explode的执行过程给大家进行解析,方便理解,具体代码如下所示:

 import pandas as pd

df = pd.DataFrame({'a':[1,2,3], 'b':[2,3,4], 'c':['a, b,c', 'b,c', 'd,e']})
   a  b     c
0  1  2  a, b,c
1  2  3    b,c
2  3  4    d,e

# 接下来,我们将'a'和'b'列设置为索引,并选择'c'列:
df = df.set_index(['a', 'b'])['c']
a  b
1  2        a, b, c
2  3            b, c
3  4            d, e
Name: c, dtype: object


  然后,我们使用str.split方法将’c’列中的字符串按逗号分割,并设置expand=True来将分割后的列表转换为单独的列:

df = df.str.split(',', expand=True)
    0    1    2
0   a     b    c
1   b     c  NaN
2   d     e  NaN
# 接着,我们使用stack方法将列转换为行,创建一个层次化索引:
df = df.stack()
a  b
1  2  a    0
   2  b    1
   3  c    2
2  3  b    0
3  4  d    0
   4  e    1
dtype: object

  然后,我们使用reset_index方法重置索引,并在drop=True参数下删除原来的列索引:

df = df.reset_index(drop=True, level=1)
   a    0
0  1    a
1  1    b
2  1    c
3  2    b
4  3    d
5  3    e
# 最后,我们再次使用reset_index方法重置索引,并将列名0改为'c':
df = df.reset_index().rename(columns={0:'c'})
   a  b  c
0  1  2  a
1  1  2  b
2  1  2  c
3  2  3  b
4  3  4  d
5  3  4  e

  

🔍 4. 注意事项

  对上述的各个函数在使用的过程中需要注意的一些事项,不然可能会出现error,具体主要为:

  • explode只适用于一维序列,如果你的数据是多维的(如二维数组),则需要先将其展平。
  • 如果序列中包含NaN或其他缺失值,explode会将它们转换为对应行中的缺失值。
  • explode默认不会改变其他列的数据,如果需要,可以通过ignore_index参数重置索引。

🔧 5. 总结

  explode是Pandas中一个非常实用的函数,特别适合处理列表或数组类型的数据。通过explode,我们可以轻松地将一行中的序列值转换为多行,从而简化数据操作和分析。本文通过实际的代码示例和输出结果,展示了explode的使用方法和效果,希望能够帮助读者更好地理解和应用这个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法驯化师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值