Python-Datenstrukturen in pandas überführen

Python-Datenstrukuren wie Listen und Arrays lassen sich in pandas Series oder DataFrames überführen.

[1]:
import numpy as np
import pandas as pd

Series

Python Lists können einfach in pandas Series umgewandelt werden:

[2]:
list1 = [
    -0.751442,
    0.816935,
    -0.272546,
    -0.268295,
    -0.296728,
    0.176255,
    -0.322612,
]

pd.Series(list1)
[2]:
0   -0.751442
1    0.816935
2   -0.272546
3   -0.268295
4   -0.296728
5    0.176255
6   -0.322612
dtype: float64

Auch mehrere Lists lassen sich einfach in eine pandas Series umwandeln:

[3]:
list2 = [
    -0.029608,
    -0.277982,
    2.693057,
    -0.850817,
    0.783868,
    -1.137835,
    -0.617132,
]

pd.Series(list1 + list2)
[3]:
0    -0.751442
1     0.816935
2    -0.272546
3    -0.268295
4    -0.296728
5     0.176255
6    -0.322612
7    -0.029608
8    -0.277982
9     2.693057
10   -0.850817
11    0.783868
12   -1.137835
13   -0.617132
dtype: float64

Es kann auch eine Liste als Index übergeben werden:

[4]:
date = [
    "2022-01-31",
    "2022-02-01",
    "2022-02-02",
    "2022-02-03",
    "2022-02-04",
    "2022-02-05",
    "2022-02-06",
]

pd.Series(list1, index=date)
[4]:
2022-01-31   -0.751442
2022-02-01    0.816935
2022-02-02   -0.272546
2022-02-03   -0.268295
2022-02-04   -0.296728
2022-02-05    0.176255
2022-02-06   -0.322612
dtype: float64

Mit Python Dictionary könnt ihr nicht nur Werte sondern auch die zugehörigen Schlüssel an eine pandas Series übergeben:

[5]:
dict1 = {
    "2022-01-31": -0.751442,
    "2022-02-01": 0.816935,
    "2022-02-02": -0.272546,
    "2022-02-03": -0.268295,
    "2022-02-04": -0.296728,
    "2022-02-05": 0.176255,
    "2022-02-06": -0.322612,
}

pd.Series(dict1)
[5]:
2022-01-31   -0.751442
2022-02-01    0.816935
2022-02-02   -0.272546
2022-02-03   -0.268295
2022-02-04   -0.296728
2022-02-05    0.176255
2022-02-06   -0.322612
dtype: float64

Wenn ihr ein dict übergebt, berücksichtigt der Index in der resultierenden pandas Series die Reihenfolge der Schlüssel im Dict.

Mit collections.ChainMap könnt ihr auch mehrere Dicts in eine pandas.Series verwandeln.

Zunächst definieren wir hierfür ein zweites Dict:

[6]:
dict2 = {
    "2022-02-07": -0.029608,
    "2022-02-08": -0.277982,
    "2022-02-09": 2.693057,
    "2022-02-10": -0.850817,
    "2022-02-11": 0.783868,
    "2022-02-12": -1.137835,
    "2022-02-13": -0.617132,
}
[7]:
from collections import ChainMap


pd.Series(ChainMap(dict1, dict2))
[7]:
2022-02-07   -0.029608
2022-02-08   -0.277982
2022-02-09    2.693057
2022-02-10   -0.850817
2022-02-11    0.783868
2022-02-12   -1.137835
2022-02-13   -0.617132
2022-01-31   -0.751442
2022-02-01    0.816935
2022-02-02   -0.272546
2022-02-03   -0.268295
2022-02-04   -0.296728
2022-02-05    0.176255
2022-02-06   -0.322612
dtype: float64

DataFrame

Listen von Python list können in ein pandas DataFrame geladen werden mit:

[8]:
df = pd.DataFrame([list1, list2])
df
[8]:
0 1 2 3 4 5 6
0 -0.751442 0.816935 -0.272546 -0.268295 -0.296728 0.176255 -0.322612
1 -0.029608 -0.277982 2.693057 -0.850817 0.783868 -1.137835 -0.617132

Ihr könnt auch eine Liste in einen DataFrame-Index überführen:

[9]:
pd.DataFrame([list1, list2], index=["2022-01-31", "2022-02-01"])
[9]:
0 1 2 3 4 5 6
2022-01-31 -0.751442 0.816935 -0.272546 -0.268295 -0.296728 0.176255 -0.322612
2022-02-01 -0.029608 -0.277982 2.693057 -0.850817 0.783868 -1.137835 -0.617132

Ein pandas DataFrame kann aus einem Dict mit Werten in Listen erstellt werden:

[10]:
data = {
    "Code": ["U+0000", "U+0001", "U+0002", "U+0003", "U+0004", "U+0005"],
    "Decimal": [0, 1, 2, 3, 4, 5],
    "Octal": ["001", "002", "003", "004", "004", "005"],
    "Key": ["NUL", "Ctrl-A", "Ctrl-B", "Ctrl-C", "Ctrl-D", "Ctrl-E"],
}
[11]:
pd.DataFrame(data)
[11]:
Code Decimal Octal Key
0 U+0000 0 001 NUL
1 U+0001 1 002 Ctrl-A
2 U+0002 2 003 Ctrl-B
3 U+0003 3 004 Ctrl-C
4 U+0004 4 004 Ctrl-D
5 U+0005 5 005 Ctrl-E

Eine weitere gängige Form von Daten sind verschachtelte Dict von Dicts:

[12]:
data2 = {
    "U+0006": {"Decimal": "6", "Octal": "006", "Key": "Ctrl-F"},
    "U+0007": {"Decimal": "7", "Octal": "007", "Key": "Ctrl-G"},
}

df2 = pd.DataFrame(data2)

df2
[12]:
U+0006 U+0007
Decimal 6 7
Octal 006 007
Key Ctrl-F Ctrl-G

Dicts von Series werden in ähnlicher Weise behandelt:

[13]:
data3 = {"U+0006": df2["U+0006"][2:], "U+0007": df2["U+0007"][2:]}

pd.DataFrame(data3)
[13]:
U+0006 U+0007
Key Ctrl-F Ctrl-G