HOWTO · Pandas

Pandas-Reihe in DataFrame umwandeln

Es wird vorgestellt, wie man Pandas-Serien in DataFrame konvertiert.

Auf dieser Seite

Verwenden Sie pandas.DataFrame() oder pandas.Series.to_frame(), um eine Pandas-Series in einen DataFrame umzuwandeln. Beide Methoden übernehmen den Index der Series als Zeilenindex des DataFrame. Mit to_frame(name=...) legen Sie den Namen der Wertespalte fest; mit reset_index(name=...) wird der bisherige Index zu einer regulären Spalte. Mehrere Series lassen sich mit pd.concat(..., axis=1) als Spalten zusammenführen.

Die Beispiele verwenden die folgende Series. Ihre Labels werden bei jeder Umwandlung zum Zeilenindex:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

print(df_series)
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64

Eine einzelne Pandas-Series mit pandas.DataFrame() in einen DataFrame umwandeln

Übergeben Sie eine Series an pandas.DataFrame(), um einen einspaltigen DataFrame zu erstellen. Mit dem Argument columns legen Sie die Bezeichnung der Wertespalte fest; der Series-Index bleibt der Zeilenindex. Dieser allgemeine Konstruktor ist hilfreich, wenn Sie bereits aus anderen Daten einen DataFrame erstellen.

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

print(pd.DataFrame(df_series, columns=["A"]))
    A
a  44
b  47
c  64
d  67
e  67
f   9
g  83
h  21
i  36
j  87

Der resultierende DataFrame hat eine Spalte mit dem Namen A. Die Labels a bis j bleiben als Index erhalten.

Verwenden Sie den Konstruktor, wenn Ihre Eingabe bereits eine Series ist und Sie beim Erstellen Optionen für den DataFrame festlegen möchten. Die Liste columns bestimmt die Bezeichnung der Ausgabespalte; sie ersetzt nicht den Series-Index. Wenn Sie columns weglassen, verwendet pandas den Namen der Series für die Wertespalte, sofern ein Name gesetzt ist. Andernfalls wird 0 verwendet.

Eine einzelne Pandas-Series mit pandas.Series.to_frame() in einen DataFrame umwandeln

Rufen Sie Series.to_frame() auf, wenn Sie eine Series direkt in einen einspaltigen DataFrame umwandeln möchten. Mit name wählen Sie die Bezeichnung der Wertespalte. Die Methode behält den Series-Index bei, was nützlich ist, wenn dessen Labels die Zeilen identifizieren.

Für eine einzelne Series ist to_frame(name="A") eine kompakte Alternative zu pandas.DataFrame(series, columns=["A"]). Wählen Sie einen Namen, der die Werte beschreibt, insbesondere wenn Sie diesen DataFrame später mit anderen Tabellen zusammenführen. Bei diesen Umwandlungen wird der Series-Index nicht zu einer Datenspalte; verwenden Sie dafür reset_index().

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

print(df_series.to_frame(name="A"))
    A
a  44
b  47
c  64
d  67
e  67
f   9
g  83
h  21
i  36
j  87

Hat eine Series keinen Namen, verwendet to_frame() 0 als Bezeichnung der Wertespalte. Wenn Sie zusätzlich den Series-Index als Daten in einer Spalte benötigen, verwenden Sie die Methode reset_index(). Wenn Sie die Indexachse benennen, heißt die erste Ausgabespalte index:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")

print(df_series)
print("\n")
print(df_series.reset_index())
index
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64


  index   0
0     a  44
1     b  47
2     c  64
3     d  67
4     e  67
5     f   9
6     g  83
7     h  21
8     i  36
9     j  87

reset_index() gibt einen DataFrame zurück, in dem der bisherige Index in der Spalte index steht und die Werte der Series in einer Spalte mit der Bezeichnung 0 stehen. Mit name können Sie die Wertespalte direkt benennen:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
).rename_axis("index")

print(df_series)
print("\n")
print(df_series.reset_index(name="A"))
index
a    44
b    47
c    64
d    67
e    67
f     9
g    83
h    21
i    36
j    87
dtype: int64


  index   A
0     a  44
1     b  47
2     c  64
3     d  67
4     e  67
5     f   9
6     g  83
7     h  21
8     i  36
9     j  87

Mehrere Pandas-Series in DataFrames umwandeln

Um mehrere Series nebeneinander in einem DataFrame anzuordnen, übergeben Sie sie mit axis=1 an pd.concat(). Pandas richtet die Werte anhand der Index-Labels aus, sodass übereinstimmende Labels in derselben Zeile stehen. Die folgenden Series haben denselben Index und ergeben drei Wertespalten:

import pandas as pd
import numpy as np

np.random.seed(0)

df_series1 = pd.Series(
    np.random.randint(0, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series2 = pd.Series(
    np.random.randint(40, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)
df_series3 = pd.Series(
    np.random.randint(80, 100, size=(10)),
    index=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
)

df_stitched = pd.concat([df_series1, df_series2, df_series3], axis=1)

print(df_stitched)
    0   1   2
a  44  46  97
b  47  64  85
c  64  64  93
d  67  52  88
e  67  98  89
f   9  41  99
g  83  78  96
h  21  79  99
i  36  63  85
j  87  86  95

Die Funktion pd.concat() fügt mit axis=1 entlang der Spalten zusammen. Standardmäßig gilt axis=0; dann erfolgt die Verkettung entlang der Zeilen. Unterscheiden sich die Indizes, richtet die spaltenweise Verkettung die Werte anhand ihrer Labels aus. Fehlt ein Label in einer Series, stehen in der entsprechenden Spalte fehlende Werte.