pandas.DataFrame.explode#

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

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

Parameters:
columnIndexLabel

要展开的列。对于多列,请指定一个非空列表,其中每个元素都是 str 或 tuple,并且所有指定的列在数据帧的同一行上的列表状数据必须具有匹配的长度。

在 1.3.0 版本加入: 多列展开

ignore_indexbool,默认 False

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

Returns:
DataFrame

将子集列中的列表展开到行;索引将为这些行重复。

Raises:
ValueError
  • 如果数据帧的列不唯一。

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

  • 如果指定的列在行上具有不匹配的元素计数。

参见

DataFrame.unstack

对(必然是分层的)索引标签的某个级别进行“逆透视”。

DataFrame.melt

将数据帧从宽格式转置为长格式。

Series.explode

将数据帧从列表状列展开为长格式。

Notes

此例程将展开列表状数据(包括列表、元组、集合、Series 和 np.ndarray)。子集行的结果 dtype 将为 object。标量将按原样返回,空列表状数据将为该行生成 np.nan。此外,展开集合时输出行的顺序将是非确定性的。

有关更多示例,请参阅 the user guide

Examples

>>> 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