当前位置: 首页 > news >正文

【Pandas】pandas DataFrame explode

Pandas2.2 DataFrame

Reshaping sorting transposing

方法描述
DataFrame.droplevel(level[, axis])用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法
DataFrame.pivot(*, columns[, index, values])用于重塑 DataFrame 的结构的方法
DataFrame.pivot_table([values, index, …])用于**创建透视表(pivot table)**的函数
DataFrame.reorder_levels(order[, axis])用于重新排序多级索引(MultiIndex)的层级顺序的方法
DataFrame.sort_values(by, *[, axis, …])用于按指定列或行的值对 DataFrame 进行排序的方法
DataFrame.sort_index(*[, axis, level, …])用于按索引(行或列)对 DataFrame 进行排序的方法
DataFrame.nlargest(n, columns[, keep])用于选取 DataFrame 中某列或多列的前 n 个最大值对应的行的方法
DataFrame.nsmallest(n, columns[, keep])用于选取 DataFrame 中某列或多列的前 n 个最小值对应的行的方法
DataFrame.swaplevel([i, j, axis])用于交换多级索引(MultiIndex)中两个层级的位置的方法
DataFrame.stack([level, dropna, sort, …])用于将 DataFrame 的列索引“压入”行索引中,从而增加行数并减少列数的方法
DataFrame.unstack([level, fill_value, sort])用于DataFrame 的行索引层级“展开”为列索引层级的方法
DataFrame.swapaxes(axis1, axis2[, copy])用于**交换 DataFrame 的两个轴(axis)**的方法
DataFrame.melt([id_vars, value_vars, …])用于**将 DataFrame 从宽格式转换为长格式(“融化”操作)**的方法
DataFrame.explode(column[, ignore_index])用于将 DataFrame 中某一列的列表元素“展开”为多行的方法

pandas.DataFrame.explode()

pandas.DataFrame.explode() 是一个用于将 DataFrame 中某一列的列表元素“展开”为多行的方法。它常用于处理嵌套数据结构,例如某列中包含多个值(以列表形式存储),通过 explode() 可以将这些值拆分成独立的行。

它是 Pandas 中非常重要的数据重塑工具之一,特别适用于处理 JSON、嵌套数组等结构化数据。


📌 方法签名
DataFrame.explode(column, ignore_index=False)

🔧 参数说明
参数类型说明
columnstr要展开的列名;该列必须是包含可迭代对象(如 list)的列
ignore_indexbool,默认 False是否重置索引(从 0 开始)

✅ 返回值
  • 返回一个新的 DataFrame,其中指定列中的每个元素被展开为一行;
  • 其他列的值会复制到每一行;
  • 原始数据不会被修改。

🧪 示例代码及结果
示例 1:基本用法(单列展开)
import pandas as pddf = pd.DataFrame({'A': [[1, 2, 3], [4, 5], [6]],'B': ['x', 'y', 'z']
})print("Original DataFrame:")
print(df)
输出:
           A  B
0  [1, 2, 3]  x
1     [4, 5]  y
2        [6]  z
# 展开 A 列
exploded = df.explode('A')
print("\nAfter explode('A'):")
print(exploded)
输出:
   A  B
0  1  x
0  2  x
0  3  x
1  4  y
1  5  y
2  6  z

注意:原始索引保留,可以使用 ignore_index=True 来重置。


示例 2:重置索引(ignore_index=True
# 展开并重置索引
exploded_reset = df.explode('A', ignore_index=True)
print("\nAfter explode('A', ignore_index=True):")
print(exploded_reset)
输出:
   A  B
0  1  x
1  2  x
2  3  x
3  4  y
4  5  y
5  6  z

示例 3:展开空列表和缺失值(NaN
df_with_nan = pd.DataFrame({'A': [[1, 2], [], None, [3]],'B': ['x', 'y', 'z', 'w']
})print("Original DataFrame with empty lists and NaN:")
print(df_with_nan)
输出:
           A  B
0     [1, 2]  x
1         []  y
2        NaN  z
3        [3]  w
# 展开 A 列
exploded_with_nan = df_with_nan.explode('A')
print("\nAfter explode on column with empty lists and NaN:")
print(exploded_with_nan)
输出:
     A  B
0    1  x
0    2  x
1  NaN  y
2  NaN  z
3    3  w

注意:

  • 空列表会被展开为空行(即 NaN);
  • NoneNaN 也会保留为 NaN

示例 4:对字符串列表进行展开
df_str = pd.DataFrame({'tags': [['python', 'data science'], ['machine learning', 'AI'], ['pandas']],'id': [1, 2, 3]
})print("Original DataFrame with string lists:")
print(df_str)
输出:
                      tags  id
0       [python, data science]   1
1  [machine learning, AI]   2
2             [pandas]   3
# 展开 tags 列
exploded_str = df_str.explode('tags')
print("\nAfter explode on string lists:")
print(exploded_str)
输出:
              tags  id
0            python   1
0      data science   1
1  machine learning   2
1                AI   2
2            pandas   3

示例 5:展开多列(需多次调用或结合 melt()

虽然 explode() 一次只能处理一列,但你可以多次调用或结合其他方法实现多列展开。

df_multi = pd.DataFrame({'A': [[1, 2], [3]],'B': [[4], [5, 6]]
})print("Original DataFrame with multiple list columns:")
print(df_multi)
输出:
           A       B
0  [1, 2]    [4]
1     [3]  [5, 6]
# 分别展开 A 和 B 列
exploded_A = df_multi.explode('A')
exploded_AB = exploded_A.explode('B')print("\nAfter exploding both A and B:")
print(exploded_AB)
输出:
   A  B
0  1  4
0  2  4
1  3  5
1  3  6

🧠 应用场景
场景说明
处理 JSON 数据如解析 API 返回的嵌套结构
日志分析将事件标签、关键词等展开以便统计
推荐系统处理用户兴趣标签、历史行为等
文本挖掘将分词后的词语展开便于词频统计
可视化准备准备适合绘制柱状图、词云的数据格式

⚠️ 注意事项
  • explode() 只能作用于包含可迭代对象(如 list)的列;
  • 如果列中包含非可迭代对象(如 int, str),会抛出错误;
  • 空列表会展开为 NaN
  • NoneNaN 会保留为 NaN
  • 使用 ignore_index=True 可避免重复索引问题;
  • 若需展开多列,需多次调用或结合 melt()apply() 等方法。

✅ 总结对比
方法是否推荐使用说明
explode(column)✅ 推荐快速将列表列展开为多行
explode(column, ignore_index=True)✅ 推荐自动重置索引
explode() + dropna()✅ 推荐移除展开后产生的 NaN
explode() + groupby()✅ 推荐对展开后的数据进行统计分析
explode() + value_counts()✅ 推荐统计展开后各值出现频率

你可以根据实际需求选择是否重置索引、如何处理空值,从而灵活地将嵌套数据转换为易于分析的扁平结构。它是 Pandas 中非常实用的数据清洗与重塑工具之一。

http://www.lqws.cn/news/451495.html

相关文章:

  • shel脚本重启Jar服务
  • 对接世界职业院校技能大赛标准,唯众打造高质量物联网实训室
  • 第二章 SQL编程系列-SQL编程基础
  • 人力资源战略重构,AI驱动高质量发展论坛顺利召开
  • OpenGL和OpenGL ES区别
  • Unity渲染管线 Global Volume 及 Post-processing
  • MACOS系统运行模拟器畅玩SWITCH游戏
  • Windsurf SWE-1模型评析:软件工程的AI革命
  • 用 DeepSeek 打造智能高考志愿填报推荐系统
  • 腾讯混元3D制作简单模型教程-2
  • c++set和pair的使用
  • Vue + AbortController 请求取消弹窗 hook 封装
  • 【Redis】解码Redis字符串:命令执行与内存优化背后的编码逻辑
  • Excel批量计算时间差
  • 邮件合并----批量从excel表中导出数据到word中
  • Linux -- 线程、锁
  • 在spring boot中使用Logback
  • 【Wi-Fi天气时钟】ESP-01S固件烧录与测试
  • (亚马逊2025峰会)7个AIGC应用案例
  • 150页PPT麦肯锡波士顿解决问题方法
  • 前端应用更新提示的优雅实现:如何让用户及时刷新页面?
  • 【内存】Linux 内核优化实战 - vm.panic_on_oom
  • 20250620在Ubuntu20.04.6下编译KickPi的K7的Android14系统
  • 无人机低空经济十大前沿创新应用探索-具体做无人机什么呢?优雅草卓伊凡
  • Spring---Spring MVC 执行流程
  • STM32:AS5600
  • Redis八股文
  • 快速搜索与管理PDF文档的专业工具
  • 网络核心 - CNI、Service 与 Ingress/Gateway API 解析
  • 大模型学习入门——Day3:注意力机制