.explode()
объектов Series
/DataFrame
;DataFrame.explode()
преобразует каждый элемент последовательности (значений DataFrame
) в отдельную строку, повторяя значения индекса;Series.explode()
делает то-же самое, только с одним (своим) столбцом..explode()
объектов Series
/DataFrame
Для столбца DataFrame
со значениями в виде последовательности, метод DataFrame.explode()
преобразует каждое значение этой последовательности в отдельную строку. Результирующий Index
будет продублирован в соответствии с меткой индекса из исходной строки:
>>> import pandas as pd >>> keys = ["panda1", "panda2", "panda3"] >>> values = [["eats", "shoots"], ["shoots", "leaves"], ["eats", "leaves"]] >>> df = pd.DataFrame({"keys": keys, "values": values}) >>> df # keys values # 0 panda1 [eats, shoots] # 1 panda2 [shoots, leaves] # 2 panda3 [eats, leaves] >>> df["values"].explode() # 0 eats # 0 shoots # 1 shoots # 1 leaves # 2 eats # 2 leaves # Name: values, dtype: object
По сути, здесь используется Series.explode()
, т.к. один столбец DataFrame
- это серия Series
:
>>> df["values"] # 0 [eats, shoots] # 1 [shoots, leaves] # 2 [eats, leaves] # Name: values, dtype: object >>> type(df["values"]) # <class 'pandas.core.series.Series'>
Метод DataFrame.explode()
может разносить столбец в DataFrame
.
>>> df.explode("values") # keys values # 0 panda1 eats # 0 panda1 shoots # 1 panda2 shoots # 1 panda2 leaves # 2 panda3 eats # 2 panda3 leaves
Метод Series.explode()
заменит пустые списки отсутствующими значениями и сохранит скалярные значения.
>>> s = pd.Series([[1, 2, 3], "foo", [], ["a", "b"]]) >>> s # 0 [1, 2, 3] # 1 foo # 2 [] # 3 [a, b] # dtype: object >>> s.explode() # 0 1 # 0 2 # 0 3 # 1 foo # 2 NaN # 3 a # 3 b # dtype: object
Строка, разделенная запятой, может быть преобразована на список с отдельными значениями, а затем преобразована в новую строку.
>>> df = pd.DataFrame([{"var1": "a,b,c", "var2": 1}, {"var1": "d,e,f", "var2": 2}]) >>> df # var1 var2 # 0 a,b,c 1 # 1 d,e,f 2 # преобразуем строку `var1` - в список строк >>> df = df.assign(var1=df.var1.str.split(",")) >>> df # var1 var2 # 0 [a, b, c] 1 # 1 [d, e, f] 2 >>> df.explode("var1") var1 var2 # 0 a 1 # 0 b 1 # 0 c 1 # 1 d 2 # 1 e 2 # 1 f 2
DataFrame.explode(column, ignore_index=False)
:Метод DataFrame.explode()
преобразует каждый элемент списка (значений DataFrame
) в строку, повторяя значения индекса. Возвращает DataFrame
c разнесенными элементами списка (значений DataFrame
) по строкам подмножества column
. Индекс для этих строк будет дублироваться.
Принимаемые аргументы:
column
- индексная метка столбца/столбцов для обработки. Несколько столбцов указываются списком, где каждый элемент будет строкой str
или tuple
. все указанные столбцы их списка данных в одной строке DataFrame
должны иметь одинаковую длину.ignore_index=False
- если True
, результирующий индекс будет сброшен и проиндексирован заново как 0, 1, ..., n - 1.Может поднимать исключение ValueError
в случаях:
DataFrame
не уникальны.DataFrame
.DataFrame.explode()
Эта процедура разбивает списки, включая списки, кортежи, множества, Series
и numpy.ndarray
. Результатом dtype
строк подмножества будет dtype: object
. Скаляры будут возвращены без изменений, а пустые списки приведут к созданию numpy.nan
для этой строки. Кроме того, при разбивке множеств, порядок строк в выводе будет недетерминированным.
>>> import pandas as pd 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]
Разбиваем списки одного столбца 'A'
.
>>> 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
Series.explode(ignore_index=False)
:Метод Series.explode()
преобразует каждый элемент списка (значения Series
) в строку, повторяя значения индекса. Возвращает Series
c разнесенными значениями списка по строкам. Индекс для этих строк будет дублироваться.
Если аргумент ignore_index=True
, то результирующий индекс будет сброшен и проиндексирован заново как 0, 1, ..., n - 1.
Series.explode()
Series.explode()
разбивает списки, включая списки, кортежи, множества, Series
и numpy.ndarray
. Результатом dtype
строк подмножества будет dtype: object
. Скаляры будут возвращены без изменений, а пустые списки приведут к созданию numpy.nan
для этой строки. Кроме того, при разбивке множеств, порядок строк в выводе будет недетерминированным.
>>> import pandas as pd >>> s = pd.Series([[1, 2, 3], 'foo', [], [3, 4]]) >>> s # 0 [1, 2, 3] # 1 foo # 2 [] # 3 [3, 4] # dtype: object >>> s.explode() # 0 1 # 0 2 # 0 3 # 1 foo # 2 NaN # 3 3 # 3 4 # dtype: object