dtoolkit.accessor.series.expand#

dtoolkit.accessor.series.expand(s: Series, /, suffix: list[Hashable] = None, delimiter: str = '_', flatten: bool = False) DataFrame[source]#

Transform each element of a list-like to a column.

../../_static/expand-vs-explode.svg
Parameters:
suffixlist of Hashable, optional

New columns of return DataFrame.

delimiterstr, default “_”

The delimiter between name and suffix.

flattenbool, default False

Flatten all like-list elements or not. It would cost more time.

Returns:
DataFrame

The structure of new column name is {column name}{delimiter}{suffix}.

Raises:
ValueError
  • If s.name is None.

  • If len(suffix) less than the max size of s’s elements.

See also

pandas.Series.explode

Transform each element of a list-like to a row.

pandas.DataFrame.explode

Transform each element of a list-like to a row.

dtoolkit.accessor.series.expand

Transform each element of a list-like to a column.

dtoolkit.accessor.dataframe.expand

Transform each element of a list-like to a column.

Examples

>>> import dtoolkit
>>> import pandas as pd

Expand the list-like element.

>>> s = pd.Series([[1, 2, 3], 'foo', [], [3, 4]], name="item")
>>> s.expand()
   item_0  item_1  item_2
0       1     2.0     3.0
1     foo     NaN     NaN
2    None     NaN     NaN
3       3     4.0     NaN

Expand sub-element type is list-like.

>>> s = pd.Series([("a", "b"), [1, [2, 3]]], name="item")
>>> s.expand(flatten=True)
   item_0  item_1  item_2
0       a       b     NaN
1       1       2     3.0

Set the columns of name.

>>> s = pd.Series([("a", 1), ["b", 2]], name="item")
>>> s.expand(suffix=["index", "value"], delimiter="-")
   item-index  item-value
0           a           1
1           b           2

Also could handle different lengths of element and suffix list.

>>> s = pd.Series([(1, 2), [1, 2, 3]], name="item")
>>> s.expand()
   item_0  item_1  item_2
0       1       2     NaN
1       1       2     3.0
>>> s.expand(suffix=["a", "b", "c", "d"])
   item_a  item_b  item_c
0       1       2     NaN
1       1       2     3.0