
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.