Heim >Backend-Entwicklung >Python-Tutorial >Wie entschachtele ich Listenspalten in Pandas DataFrames?

Wie entschachtele ich Listenspalten in Pandas DataFrames?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-30 19:21:10297Durchsuche

How to Unnest List Columns in Pandas DataFrames?

Spalten mit Pandas aufheben

Beim Umgang mit DataFrames, die Listenspalten enthalten, kann es nützlich sein, diese Listen in separate Zeilen zu „entfalten“.

Methode 1: Verwenden von DataFrame.explode() (Pandas >= 0,25)

Für eine einspaltige Explosion verwenden Sie explosion() direkt:

df = pd.DataFrame({'A': [1, 2], 'B': [[1, 2], [1, 2]]})

df_exploded = df.explode('B')

Methode 2: Serie anwenden

df_exploded = df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})

Methode 3: DataFrame wiederholen

df_exploded = pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})

Methode 4: Reindex/Loc

df_exploded = df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))

Methode 5: ChainMap

from collections import ChainMap
d = dict(ChainMap(*map(dict.fromkeys, df['B'], df['A'])))
df_exploded = pd.DataFrame(list(d.items()),columns=df.columns[::-1])

Methode 6: Numpy

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
df_exploded = pd.DataFrame(data=newvalues[0],columns=df.columns)

Methode 7: Iteratoren

from itertools import cycle,chain
l=df.values.tolist()
l1=[list(zip([x[0]], cycle(x[1])) if len([x[0]]) > len(x[1]) else list(zip(cycle([x[0]]), x[1]))) for x in l]
df_exploded = pd.DataFrame(list(chain.from_iterable(l1)),columns=df.columns)

Verallgemeinerung auf mehrere Spalten

Um die oben genannten Methoden zu verallgemeinern Verwenden Sie für mehrere Spalten die folgende Funktion:

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx
    
    return df1.join(df.drop(explode, 1), how='left')

Spaltenweises Aufheben der Verschachtelung

Um die Verschachtelung horizontal aufzuheben, ändern Sie die Funktion:

def unnesting(df, explode, axis):
    if axis==1:
        # Previous implementation
    else :
        df1 = pd.concat([
                         pd.DataFrame(df[x].tolist(), index=df.index).add_prefix(x) for x in explode], axis=1)
        return df1.join(df.drop(explode, 1), how='left')

Das obige ist der detaillierte Inhalt vonWie entschachtele ich Listenspalten in Pandas DataFrames?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Die Sache mit den WortenNächster Artikel:Die Sache mit den Worten