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

Wie entschachtele ich Listenspalten in Pandas DataFrames?

Patricia Arquette
Freigeben: 2024-12-30 19:21:10
Original
294 Leute haben es durchsucht

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')
Nach dem Login kopieren

Methode 2: Serie anwenden

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

Methode 3: DataFrame wiederholen

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

Methode 4: Reindex/Loc

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

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])
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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')
Nach dem Login kopieren

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')
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage