Skip to content

Konvertieren von pandas.DataFrame, Series und Liste ineinander

Python

pandas.DataFrame, pandas.Series und die eingebaute Typenliste von Python können ineinander konvertiert werden.

Dieser Artikel hat folgenden Inhalt.

  • Konvertieren Sie die Liste in pandas.DataFrame, pandas.Series
    • Für Nur-Daten-Liste
    • Für Liste mit Daten und Beschriftungen (Zeilen-/Spaltennamen)
  • Konvertieren Sie pandas.DataFrame, pandas.Series in einer Liste
    • Konvertieren Sie Daten in einer Liste
    • Konvertieren Sie Daten und Label (Zeilen-/Spaltenname) in einer Liste
    • Etiketten (Zeilen-/Spaltennamen) in Liste umwandeln

Konvertieren Sie die Liste in pandas.DataFrame, pandas.Series

Für Nur-Daten-Liste

Durch Übergabe eines Objekts vom Listentyp an das erste Argument jedes Konstruktors pandas.DataFrame() und pandas.Series() werden pandas.DataFrame und pandas.Series basierend auf der Liste generiert.

Ein Beispiel für die Generierung von pandas.Series aus einer eindimensionalen Liste ist wie folgt. Sie können auch eine Bezeichnung mit dem Parameterindex angeben.

import pandas as pd

l_1d = [0, 1, 2]

s = pd.Series(l_1d)
print(s)
# 0    0
# 1    1
# 2    2
# dtype: int64

s = pd.Series(l_1d, index=['row1', 'row2', 'row3'])
print(s)
# row1    0
# row2    1
# row3    2
# dtype: int64

Ein Beispiel für das Generieren von pandas.DataFrame aus einer zweidimensionalen Liste (Liste von Listen) ist wie folgt. Sie können auch den Zeilennamen mit dem Parameterindex und den Spaltennamen mit dem Parametercolumns angeben.

l_2d = [[0, 1, 2], [3, 4, 5]]

df = pd.DataFrame(l_2d)
print(df)
#    0  1  2
# 0  0  1  2
# 1  3  4  5

df = pd.DataFrame(l_2d,
                  index=['row1', 'row2'],
                  columns=['col1', 'col2', 'col3'])
print(df)
#       col1  col2  col3
# row1     0     1     2
# row2     3     4     5

Nach dem Generieren von pandas.DataFrame und pandas.Series können Sie die Zeilen- und Spaltennamen festlegen und ändern, indem Sie die Index- und Spaltenattribute aktualisieren.

Für Liste mit Daten und Beschriftungen (Zeilen-/Spaltennamen)

So generieren Sie pandas.Series aus einer Liste von Bezeichnungs- und Wertpaaren.

Brechen Sie es in einer Liste von Labels und einer Liste von Werten auf und übergeben Sie sie an pandas.Series(). Laptops zur Verarbeitung mit * und zip() finden Sie im following Artikel.

l_1d_index = [['Alice', 0], ['Bob', 1], ['Charlie', 2]]

index, value = zip(*l_1d_index)
print(index)
# ('Alice', 'Bob', 'Charlie')

print(value)
# (0, 1, 2)

s_index = pd.Series(value, index=index)
print(s_index)
# Alice      0
# Bob        1
# Charlie    2
# dtype: int64

So erstellen Sie einen pandas.DataFrame aus einer Liste von Labels und mehreren Werten.

Die Liste kann wie im Folgenden einfaches Beispiel von pandas.Series zerlegt werden, aber es ist, den Index mit der Methode set_index() zu setzen, nachdem die gesamte Liste gelesen wurde.

l_2d_index = [['Alice', 0, 0.0], ['Bob', 1, 0.1], ['Charlie', 2, 0.2]]

df_index = pd.DataFrame(l_2d_index, columns=['name', 'val1', 'val2'])
print(df_index)
#       name  val1  val2
# 0    Alice     0   0.0
# 1      Bob     1   0.1
# 2  Charlie     2   0.2

df_index_set = df_index.set_index('name')
print(df_index_set)
#          val1  val2
# name               
# Alice       0   0.0
# Bob         1   0.1
# Charlie     2   0.2

Wenn der Datentyp dtype für jede Spalte unterschiedlich IST, wie in diesem Beispiel, wird automatisch der optimale dtype für jede Spalte ausgewählt.

print(df_index_set.dtypes)
# val1      int64
# val2    float64
# dtype: object

Wenn die ursprüngliche Liste auch Spaltennamen enthält, geben SIE die erste Zeile als Spalten und die zweite und die folgenden Zeilen als erstes Argument an.

l_2d_index_columns = [['name', 'val1', 'val2'], ['Alice', 0, 0.0], ['Bob', 1, 0.1], ['Charlie', 2, 0.2]]

df_index_columns = pd.DataFrame(l_2d_index_columns[1:], columns=l_2d_index_columns[0])
print(df_index_columns)
#       name  val1  val2
# 0    Alice     0   0.0
# 1      Bob     1   0.1
# 2  Charlie     2   0.2

df_index_columns_set = df_index_columns.set_index('name')
print(df_index_columns_set)
#          val1  val2
# name               
# Alice       0   0.0
# Bob         1   0.1
# Charlie     2   0.2

Konvertieren Sie pandas.DataFrame, pandas.Series in einer Liste

Konvertieren Sie Daten in einer Liste

Da es keine Methode gibt, um pandas.DataFrame, pandas.Series direkt in eine Liste zu konvertieren, rufen Sie zuerst das NumPy-Array ndarray mit dem Attributwerten ab und verwenden Sie dann die Methode tolist(), um in eine Liste zu konvertieren.

s = pd.Series([0, 1, 2])
print(s)
# 0    0
# 1    1
# 2    2
# dtype: int64

l_1d = s.values.tolist()
print(l_1d)
# [0, 1, 2]
df = pd.DataFrame([[0, 1, 2], [3, 4, 5]])
print(df)
#    0  1  2
# 0  0  1  2
# 1  3  4  5

l_2d = df.values.tolist()
print(l_2d)
# [[0, 1, 2], [3, 4, 5]]

Das Attributwerte enthält keine Beschriftungen (Zeilen-/Spaltennamen).

s_index = pd.Series([0, 1, 2], index=['row1', 'row2', 'row3'])
print(s_index)
# row1    0
# row2    1
# row3    2
# dtype: int64

l_1d = s_index.values.tolist()
print(l_1d)
# [0, 1, 2]
df_index = pd.DataFrame([[0, 1, 2], [3, 4, 5]],
                        index=['row1', 'row2'],
                        columns=['col1', 'col2', 'col3'])
print(df_index)
#       col1  col2  col3
# row1     0     1     2
# row2     3     4     5

l_2d = df_index.values.tolist()
print(l_2d)
# [[0, 1, 2], [3, 4, 5]]

Konvertieren Sie Daten und Label (Zeilen-/Spaltenname) in einer Liste

Wenn SIE das Label als Listendaten behalten möchten, setzen Sie den Index mit der Methode reset_index() zurück.

l_1d_index = s_index.reset_index().values.tolist()
print(l_1d_index)
# [['row1', 0], ['row2', 1], ['row3', 2]]

Da es keine Methode zum Zurücksetzen von Spalten gibt, wenn Sie sowohl den Zeilennamen als auch den Spaltennamen von pandas.DataFrame als Listendaten behalten möchten, transponieren Sie ihn nach Anwendung der reset_index()-Methode mit .T und wenden Sie die reset_index()- Methode an , und stellen Sie es dann mit erneut .T wieder her.

l_2d_index = df_index.reset_index().values.tolist()
print(l_2d_index)
# [['row1', 0, 1, 2], ['row2', 3, 4, 5]]

l_2d_index_columns = df_index.reset_index().T.reset_index().T.values.tolist()
print(l_2d_index_columns)
# [['index', 'col1', 'col2', 'col3'], ['row1', 0, 1, 2], ['row2', 3, 4, 5]]

Etiketten (Zeilen-/Spaltennamen) in Liste umwandeln

Wenn Sie nur das Label in Eine Liste konvertieren möchten, verwenden Sie das Indexattribut für pandas.Series.

Das Index-Attribut ist vom Typ Index (RangeIndex-Typ im Fall der Standardsequenznummer) und hat eine tolist()-Methode.

print(s_index)
# row1    0
# row2    1
# row3    2
# dtype: int64

print(s_index.index)
# Index(['row1', 'row2', 'row3'], dtype="object")

print(type(s_index.index))
# <class 'pandas.core.indexes.base.Index'>

print(s_index.index.tolist())
# ['row1', 'row2', 'row3']

print(type(s_index.index.tolist()))
# <class 'list'>

Verwenden Sie in ähnlicher Weise für pandas.DataFrame das Indexattribut für Zeilenbeschriftungen und das Columns-Attribut für Spaltenbeschriftungen. Beide sind vom Typ Index.

print(df_index)
#       col1  col2  col3
# row1     0     1     2
# row2     3     4     5

print(df_index.index)
# Index(['row1', 'row2'], dtype="object")

print(df_index.index.tolist())
# ['row1', 'row2']

print(df_index.columns)
# Index(['col1', 'col2', 'col3'], dtype="object")

print(df_index.columns.tolist())
# ['col1', 'col2', 'col3']

Der Index-Typ kann wie in for used Werden, und das Element kann durch Angabe der Position mit [] erhalten werden. In vielen Fällen ist es nicht erforderlich, sie in eine Liste umzuwandeln.

Sie können auch Slices verwenden, aber Sie können keine Elemente ändern.

for i in s_index.index:
    print(i, type(i))
# row1 <class 'str'>
# row2 <class 'str'>
# row3 <class 'str'>

print(s_index.index[0])
# row1

print(s_index.index[:2])
# Index(['row1', 'row2'], dtype="object")

# s_index.index[0] = 'ROW1'
# TypeError: Index does not support mutable operations

Verwenden Sie rename(), wenn Sie das Index- oder Spaltenelement ändern möchten.