pandas.DataFrame.explode#

DataFrame.explode(column, ignore_index=False)[源代码][源代码]#

将类似列表的每个元素转换为一行,复制索引值。

参数:
IndexLabel

要展开的列。对于多列,指定一个非空列表,每个元素为字符串或元组,并且所有指定的列在同一行的列表数据必须具有匹配的长度。

Added in version 1.3.0: 多列爆炸

ignore_indexbool, 默认 False

如果为真,生成的索引将被标记为 0, 1, …, n - 1。

返回:
DataFrame

将展开的列表转换为子集列的行;这些行的索引将被重复。

引发:
ValueError
  • 如果框架的列不是唯一的。

  • 如果指定的列展开为空列表。

  • 如果在框架中逐行展开的指定列没有匹配的元素数量。

参见

DataFrame.unstack

旋转(必须是层次结构的)索引标签的一个层级。

DataFrame.melt

将 DataFrame 从宽格式透视到长格式。

Series.explode

将 DataFrame 从类似列表的列展开为长格式。

注释

这个例程将分解包括列表、元组、集合、Series 和 np.ndarray 在内的类列表对象。子集行的结果 dtype 将是对象。标量将保持不变,空列表对象将导致该行为 np.nan。此外,当分解集合时,输出行顺序将是不确定的。

更多示例请参考 用户指南

示例

>>> df = pd.DataFrame(
...     {
...         "A": [[0, 1, 2], "foo", [], [3, 4]],
...         "B": 1,
...         "C": [["a", "b", "c"], np.nan, [], ["d", "e"]],
...     }
... )
>>> df
           A  B          C
0  [0, 1, 2]  1  [a, b, c]
1        foo  1        NaN
2         []  1         []
3     [3, 4]  1     [d, e]

单列爆炸。

>>> df.explode("A")
     A  B          C
0    0  1  [a, b, c]
0    1  1  [a, b, c]
0    2  1  [a, b, c]
1  foo  1        NaN
2  NaN  1         []
3    3  1     [d, e]
3    4  1     [d, e]

多列爆炸。

>>> df.explode(list("AC"))
     A  B    C
0    0  1    a
0    1  1    b
0    2  1    c
1  foo  1  NaN
2  NaN  1  NaN
3    3  1    d
3    4  1    e