You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas DataFrame中的列表型列展平?

如何将包含列表的Pandas DataFrame展开扁平化?

我有这样一个数据结构:

ds = [{ "name": "groupA", "subGroups": [123,456] }, { "name": "groupB", "subGroups": ['aaa', 'bbb' , 'ccc'] }]

转换成Pandas DataFrame后得到df:

namesubGroups
0groupA[123, 456]
1groupB['aaa', 'bbb', 'ccc']

我希望把它转换成如下结构的DataFrame:

namesubGroupsFlattend
0groupA123
1groupA456
2groupBaaa
3groupBbbb
4groupBccc

请问有实现思路吗?


当然有啦!最直接且高效的方案就是用Pandas自带的explode()函数,它就是专门为处理这种包含列表的列设计的——能把列表里的每个元素拆成单独的行,同时自动保留其他列的对应值。

方法一:使用explode()(推荐,Pandas 0.25.0+可用)

步骤很简单:

  1. 先导入Pandas并创建初始DataFrame:
import pandas as pd

ds = [{ "name": "groupA", "subGroups": [123,456] }, { "name": "groupB", "subGroups": ['aaa', 'bbb' , 'ccc'] }]
df = pd.DataFrame(ds)
  1. 调用explode()拆分列表列,再重命名列名到你想要的样式:
df_flattened = df.explode('subGroups').rename(columns={'subGroups': 'subGroupsFlattend'})

执行后打印df_flattened,就是你想要的扁平化结构啦!

方法二:兼容旧版Pandas(0.25.0以下)

如果你还在使用比较旧的Pandas版本,explode()还没被引入,可以用apply配合pd.Series来实现:

# 先把name设为索引,避免拆分时丢失对应关系
df_flattened = df.set_index('name')['subGroups'].apply(pd.Series).stack().reset_index(name='subGroupsFlattend')
# 删掉拆分后自动生成的多余列level_1
df_flattened = df_flattened.drop('level_1', axis=1)

这个方法本质是把列表拆成多列,再堆叠成行,最终也能得到目标结构。


内容的提问来源于stack exchange,提问作者More Than Five

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:56:14