欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 【Pandas】pandas DataFrame explode

【Pandas】pandas DataFrame explode

2025/6/21 6:17:31 来源:https://blog.csdn.net/weixin_39648905/article/details/148709090  浏览:    关键词:【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 中非常实用的数据清洗与重塑工具之一。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词