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

DateFrame erstellen mit Zufallswerten

In [2]:
test = pd.util.testing.makeDataFrame()
test.head()
Out[2]:
A B C D
T7ui0DVSJz 1.860623 -1.456650 0.167889 2.364006
tWTuaUKZDW 0.567499 0.073790 0.392487 0.589185
l7Za8cE3UH -1.546652 1.186440 -1.469309 0.700520
PxN8kNVjpA -0.267887 0.685031 -1.225297 -1.212490
X82mIJJ6pJ 1.763970 0.890721 1.550574 0.397558
In [3]:
# mit fehlenden Werten
test_mis = pd.util.testing.makeMissingDataframe()
test_mis.head()
Out[3]:
A B C D
NCvD4CO3YN -1.082915 -0.315389 0.139460 0.337601
PpqCr9G4AA 0.410707 0.968389 0.788095 -0.246719
hadyztKLft NaN 0.233256 -1.592005 -0.708275
CBglXOeByh 0.335649 0.123047 1.865868 -2.032585
C5JpKbVevx 0.675719 NaN -0.246371 1.104754
In [48]:
# mit Datetime Index
test_dat = pd.util.testing.makeTimeDataFrame() 
test_dat.head()
Out[48]:
A B C D
2000-01-03 -0.167569 0.220453 1.617215 -1.999288
2000-01-04 -1.270477 1.493113 0.123121 -1.169359
2000-01-05 -1.451894 0.342517 0.807345 1.861608
2000-01-06 1.541394 -0.396037 1.390614 0.065397
2000-01-07 -0.348036 -1.664209 1.315175 0.626645
In [5]:
# mit verschiedenen Datentypen
derp = pd.util.testing.makeMixedDataFrame() 
derp
Out[5]:
A B C D
0 0.0 0.0 foo1 2009-01-01
1 1.0 1.0 foo2 2009-01-02
2 2.0 0.0 foo3 2009-01-05
3 3.0 1.0 foo4 2009-01-06
4 4.0 0.0 foo5 2009-01-07

Index

In [6]:
# Index resetten
# df = df.reset_index(drop=True)
In [7]:
# Multiindex setzen
test = test.set_index(['A', 'B'])
test.head()
Out[7]:
C D
A B
1.860623 -1.456650 0.167889 2.364006
0.567499 0.073790 0.392487 0.589185
-1.546652 1.186440 -1.469309 0.700520
-0.267887 0.685031 -1.225297 -1.212490
1.763970 0.890721 1.550574 0.397558

Sortieren

Nach Werten einer Spalten sortieren

In [8]:
derp.sort_values('A', ascending=False)
Out[8]:
A B C D
4 4.0 0.0 foo5 2009-01-07
3 3.0 1.0 foo4 2009-01-06
2 2.0 0.0 foo3 2009-01-05
1 1.0 1.0 foo2 2009-01-02
0 0.0 0.0 foo1 2009-01-01

Nach Index sortieren

In [9]:
# derp.sort_index()

Aus Dictionary

In [10]:
raw_data = {'town': ['Hamburg', 'Heidelberg', 'Freiburg', 'Tübingen', 'Berlin', 'Hamburg'], 
        'shape': ['oblong', 'round', 'diamond', 'sphere', 'dog', 'cat'], 
        'duration': [420, 472, 360, 204, 713, 14], 
        'color': ['blue and green', 'red', 'white', 'yellow', 'fuchsia', 'pink'],
        'date': ['2013-08-11', '2019-08-12', '2019-08-13', '2019-08-14', '2019-08-15', '2019-07-21']}

df = pd.DataFrame(raw_data, columns = ['town', 'date', 'shape', 'color', 'duration'])
df
Out[10]:
town date shape color duration
0 Hamburg 2013-08-11 oblong blue and green 420
1 Heidelberg 2019-08-12 round red 472
2 Freiburg 2019-08-13 diamond white 360
3 Tübingen 2019-08-14 sphere yellow 204
4 Berlin 2019-08-15 dog fuchsia 713
5 Hamburg 2019-07-21 cat pink 14

Aus Listen

In [11]:
kuchen = ['Linzer Torte', 'Apfelkuchen', 'Frankfurter Kranz', 'Zitronenrolle']
pralinen= ['Schoko', 'Haselnuss', 'Marzipan', 'na']
data = pd.DataFrame({'Kuchen': kuchen, 'Pralinen': pralinen})
data
Out[11]:
Kuchen Pralinen
0 Linzer Torte Schoko
1 Apfelkuchen Haselnuss
2 Frankfurter Kranz Marzipan
3 Zitronenrolle na

Aus Zufallszahlen

In [12]:
rand_df_1 = pd.DataFrame(np.random.rand(6,8))
rand_df_1.head()
Out[12]:
0 1 2 3 4 5 6 7
0 0.631177 0.971441 0.470261 0.021992 0.907802 0.674598 0.088801 0.994585
1 0.948242 0.277414 0.534565 0.162597 0.598151 0.274211 0.901323 0.565576
2 0.632245 0.534500 0.416597 0.373376 0.561850 0.401043 0.492720 0.126259
3 0.164502 0.053887 0.001020 0.464368 0.228551 0.699032 0.325843 0.228878
4 0.929954 0.300823 0.557122 0.427963 0.743511 0.430353 0.005025 0.069784
In [13]:
rand_df = pd.DataFrame(np.random.rand(6,8), columns=list('abcdefgh'))
rand_df
Out[13]:
a b c d e f g h
0 0.070739 0.810936 0.983964 0.322162 0.314847 0.688803 0.644334 0.911163
1 0.228506 0.791698 0.750331 0.618039 0.012588 0.763173 0.306966 0.479525
2 0.165766 0.829673 0.705189 0.385486 0.041509 0.474277 0.826638 0.153335
3 0.889034 0.110509 0.441567 0.149139 0.675093 0.638686 0.045680 0.517197
4 0.229792 0.028568 0.006122 0.448716 0.631276 0.361258 0.328645 0.063400
5 0.669174 0.098702 0.200468 0.591137 0.675023 0.235554 0.567640 0.448710
In [14]:
df
Out[14]:
town date shape color duration
0 Hamburg 2013-08-11 oblong blue and green 420
1 Heidelberg 2019-08-12 round red 472
2 Freiburg 2019-08-13 diamond white 360
3 Tübingen 2019-08-14 sphere yellow 204
4 Berlin 2019-08-15 dog fuchsia 713
5 Hamburg 2019-07-21 cat pink 14

Spalten umbenennen

Spaltennamen beim Einlesen zuweisen

In [15]:
# pd.read_csv('df', names = Liste, header=0)

Mit Dictionary umbenennen

In [16]:
rand_df = rand_df.rename({'a':'a alpha', 
                          'b':'b beta'}, axis=1)
rand_df
Out[16]:
a alpha b beta c d e f g h
0 0.070739 0.810936 0.983964 0.322162 0.314847 0.688803 0.644334 0.911163
1 0.228506 0.791698 0.750331 0.618039 0.012588 0.763173 0.306966 0.479525
2 0.165766 0.829673 0.705189 0.385486 0.041509 0.474277 0.826638 0.153335
3 0.889034 0.110509 0.441567 0.149139 0.675093 0.638686 0.045680 0.517197
4 0.229792 0.028568 0.006122 0.448716 0.631276 0.361258 0.328645 0.063400
5 0.669174 0.098702 0.200468 0.591137 0.675023 0.235554 0.567640 0.448710

Ersetzungen vornehmen

In [17]:
rand_df.columns = rand_df.columns.str.replace(' ', '_')
rand_df
Out[17]:
a_alpha b_beta c d e f g h
0 0.070739 0.810936 0.983964 0.322162 0.314847 0.688803 0.644334 0.911163
1 0.228506 0.791698 0.750331 0.618039 0.012588 0.763173 0.306966 0.479525
2 0.165766 0.829673 0.705189 0.385486 0.041509 0.474277 0.826638 0.153335
3 0.889034 0.110509 0.441567 0.149139 0.675093 0.638686 0.045680 0.517197
4 0.229792 0.028568 0.006122 0.448716 0.631276 0.361258 0.328645 0.063400
5 0.669174 0.098702 0.200468 0.591137 0.675023 0.235554 0.567640 0.448710

Präfixe und Suffixe anhängen

In [18]:
rand_df_ = rand_df.add_prefix('X_')
rand_df_ = rand_df.add_suffix('_Y')
rand_df_
Out[18]:
a_alpha_Y b_beta_Y c_Y d_Y e_Y f_Y g_Y h_Y
0 0.070739 0.810936 0.983964 0.322162 0.314847 0.688803 0.644334 0.911163
1 0.228506 0.791698 0.750331 0.618039 0.012588 0.763173 0.306966 0.479525
2 0.165766 0.829673 0.705189 0.385486 0.041509 0.474277 0.826638 0.153335
3 0.889034 0.110509 0.441567 0.149139 0.675093 0.638686 0.045680 0.517197
4 0.229792 0.028568 0.006122 0.448716 0.631276 0.361258 0.328645 0.063400
5 0.669174 0.098702 0.200468 0.591137 0.675023 0.235554 0.567640 0.448710

Majuskel/ Minuskel Konvertierung

In [19]:
# df.rename(str.upper, axis=1)
# df.rename(str.lower, axis=1)

Spalten mit List Comprehension umbenennen

In [20]:
[name.strip().replace('.', '') for name in df.columns]
Out[20]:
['town', 'date', 'shape', 'color', 'duration']

Alle Spalten mit Liste umbenennen// Header deklarieren

In [21]:
rand_df_1.columns = ['eins', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht']
rand_df_1
Out[21]:
eins zwei drei vier fünf sechs sieben acht
0 0.631177 0.971441 0.470261 0.021992 0.907802 0.674598 0.088801 0.994585
1 0.948242 0.277414 0.534565 0.162597 0.598151 0.274211 0.901323 0.565576
2 0.632245 0.534500 0.416597 0.373376 0.561850 0.401043 0.492720 0.126259
3 0.164502 0.053887 0.001020 0.464368 0.228551 0.699032 0.325843 0.228878
4 0.929954 0.300823 0.557122 0.427963 0.743511 0.430353 0.005025 0.069784
5 0.376402 0.375946 0.844013 0.214120 0.013345 0.236992 0.506499 0.172112

Spalten anhängen

Eine neue Spalte an ein DataFrame anhängen

In [22]:
df = df.assign(clouds=['yes', 'no', 'yes', 'no', 'no', 'yes'])
df
Out[22]:
town date shape color duration clouds
0 Hamburg 2013-08-11 oblong blue and green 420 yes
1 Heidelberg 2019-08-12 round red 472 no
2 Freiburg 2019-08-13 diamond white 360 yes
3 Tübingen 2019-08-14 sphere yellow 204 no
4 Berlin 2019-08-15 dog fuchsia 713 no
5 Hamburg 2019-07-21 cat pink 14 yes

Eine neue Spalte aus einer Liste anhängen

In [23]:
df['sound'] = ['like plane', 'roaring', 'humming', 'like bee', 'barking', 'like angry cat']
df
Out[23]:
town date shape color duration clouds sound
0 Hamburg 2013-08-11 oblong blue and green 420 yes like plane
1 Heidelberg 2019-08-12 round red 472 no roaring
2 Freiburg 2019-08-13 diamond white 360 yes humming
3 Tübingen 2019-08-14 sphere yellow 204 no like bee
4 Berlin 2019-08-15 dog fuchsia 713 no barking
5 Hamburg 2019-07-21 cat pink 14 yes like angry cat

Ein Series erzeugen

In [24]:
ser = pd.Series(['morning', 'evening', 'night', 'full stars', 'late', 'dawn'], index = [0,1,2,3,4,5], name='time')
ser
Out[24]:
0       morning
1       evening
2         night
3    full stars
4          late
5          dawn
Name: time, dtype: object
In [25]:
print(ser.index)
print(ser.values)
Int64Index([0, 1, 2, 3, 4, 5], dtype='int64')
['morning' 'evening' 'night' 'full stars' 'late' 'dawn']

Ein Series an ein DataFrame als Spalte anhängen

In [26]:
df = pd.concat([df, ser], axis=1)
df
Out[26]:
town date shape color duration clouds sound time
0 Hamburg 2013-08-11 oblong blue and green 420 yes like plane morning
1 Heidelberg 2019-08-12 round red 472 no roaring evening
2 Freiburg 2019-08-13 diamond white 360 yes humming night
3 Tübingen 2019-08-14 sphere yellow 204 no like bee full stars
4 Berlin 2019-08-15 dog fuchsia 713 no barking late
5 Hamburg 2019-07-21 cat pink 14 yes like angry cat dawn

Neuen Wert mit iloc zuweisen

In [27]:
df.iloc[1, 5] = 'happy little'

Reihen und Spalten entfernen

In [28]:
derp
Out[28]:
A B C D
0 0.0 0.0 foo1 2009-01-01
1 1.0 1.0 foo2 2009-01-02
2 2.0 0.0 foo3 2009-01-05
3 3.0 1.0 foo4 2009-01-06
4 4.0 0.0 foo5 2009-01-07
In [29]:
# Spalte löschen
derp = derp.drop('A', axis=1)
derp
Out[29]:
B C D
0 0.0 foo1 2009-01-01
1 1.0 foo2 2009-01-02
2 0.0 foo3 2009-01-05
3 1.0 foo4 2009-01-06
4 0.0 foo5 2009-01-07
In [30]:
# Reihe löschen
derp = derp.drop(1)
derp
Out[30]:
B C D
0 0.0 foo1 2009-01-01
2 0.0 foo3 2009-01-05
3 1.0 foo4 2009-01-06
4 0.0 foo5 2009-01-07
In [31]:
# Mit Boolean Conditon
derp = derp.drop(derp[derp.B == 1.0].index)
derp
Out[31]:
B C D
0 0.0 foo1 2009-01-01
2 0.0 foo3 2009-01-05
4 0.0 foo5 2009-01-07
In [32]:
derp = derp.drop(derp[derp.C == 'foo1'].index)
derp
Out[32]:
B C D
2 0.0 foo3 2009-01-05
4 0.0 foo5 2009-01-07
In [33]:
df
Out[33]:
town date shape color duration clouds sound time
0 Hamburg 2013-08-11 oblong blue and green 420 yes like plane morning
1 Heidelberg 2019-08-12 round red 472 happy little roaring evening
2 Freiburg 2019-08-13 diamond white 360 yes humming night
3 Tübingen 2019-08-14 sphere yellow 204 no like bee full stars
4 Berlin 2019-08-15 dog fuchsia 713 no barking late
5 Hamburg 2019-07-21 cat pink 14 yes like angry cat dawn
In [34]:
hamburg = df[df.town == 'Hamburg']
hamburg
Out[34]:
town date shape color duration clouds sound time
0 Hamburg 2013-08-11 oblong blue and green 420 yes like plane morning
5 Hamburg 2019-07-21 cat pink 14 yes like angry cat dawn

Formatieren

Reihenfolge der Reihen umkehren

In [35]:
df = df.loc[::-1]
df
Out[35]:
town date shape color duration clouds sound time
5 Hamburg 2019-07-21 cat pink 14 yes like angry cat dawn
4 Berlin 2019-08-15 dog fuchsia 713 no barking late
3 Tübingen 2019-08-14 sphere yellow 204 no like bee full stars
2 Freiburg 2019-08-13 diamond white 360 yes humming night
1 Heidelberg 2019-08-12 round red 472 happy little roaring evening
0 Hamburg 2013-08-11 oblong blue and green 420 yes like plane morning

Reihenfolge der Spalten umkehren

In [36]:
df = df.loc[:, ::-1]
df
Out[36]:
time sound clouds duration color shape date town
5 dawn like angry cat yes 14 pink cat 2019-07-21 Hamburg
4 late barking no 713 fuchsia dog 2019-08-15 Berlin
3 full stars like bee no 204 yellow sphere 2019-08-14 Tübingen
2 night humming yes 360 white diamond 2019-08-13 Freiburg
1 evening roaring happy little 472 red round 2019-08-12 Heidelberg
0 morning like plane yes 420 blue and green oblong 2013-08-11 Hamburg

Stack und unstack()

In [37]:
data.stack()
Out[37]:
0  Kuchen           Linzer Torte
   Pralinen               Schoko
1  Kuchen            Apfelkuchen
   Pralinen            Haselnuss
2  Kuchen      Frankfurter Kranz
   Pralinen             Marzipan
3  Kuchen          Zitronenrolle
   Pralinen                   na
dtype: object
In [38]:
data.unstack()
Out[38]:
Kuchen    0         Linzer Torte
          1          Apfelkuchen
          2    Frankfurter Kranz
          3        Zitronenrolle
Pralinen  0               Schoko
          1            Haselnuss
          2             Marzipan
          3                   na
dtype: object
In [39]:
data.T
Out[39]:
0 1 2 3
Kuchen Linzer Torte Apfelkuchen Frankfurter Kranz Zitronenrolle
Pralinen Schoko Haselnuss Marzipan na

DataFrame in array umwandeln

In [40]:
df_mat = df.values
df_mat
Out[40]:
array([['dawn', 'like angry cat', 'yes', 14, 'pink', 'cat', '2019-07-21',
        'Hamburg'],
       ['late', 'barking', 'no', 713, 'fuchsia', 'dog', '2019-08-15',
        'Berlin'],
       ['full stars', 'like bee', 'no', 204, 'yellow', 'sphere',
        '2019-08-14', 'Tübingen'],
       ['night', 'humming', 'yes', 360, 'white', 'diamond', '2019-08-13',
        'Freiburg'],
       ['evening', 'roaring', 'happy little', 472, 'red', 'round',
        '2019-08-12', 'Heidelberg'],
       ['morning', 'like plane', 'yes', 420, 'blue and green', 'oblong',
        '2013-08-11', 'Hamburg']], dtype=object)

Werte aus Spalten extrahieren

Liste in Spalte in neues DataFrame packen

In [41]:
df_li = pd.DataFrame({'col1':[[1,2],[3,4], [1,2], [1,3]], 
                     'col2':[9,10,11,12]})
df_li
Out[41]:
col1 col2
0 [1, 2] 9
1 [3, 4] 10
2 [1, 2] 11
3 [1, 3] 12
In [42]:
df_li_new = df_li.col1.apply(pd.Series)
df_li_new
Out[42]:
0 1
0 1 2
1 3 4
2 1 2
3 1 3
In [57]:
new = pd.concat([df_li, df_li_new], axis=1)
new = new.drop('col1', axis=1)
new
Out[57]:
col2 0 1
0 9 1 2
1 10 3 4
2 11 1 2
3 12 1 3

String splitten, jeden Split in eigene Spalte im DF packen

In [ ]:
# df.col.str.split(' ', expand=True)
# df[['ser1', 'ser2', 'ser3']] = df.col.str.split(' ', expand=True)

# nur einen der Splits behalten
# df['ser1'] = df.col.str.split(' ', expand=True)[0]

DataFrames zusammenfügen an Spalten

  • Inner Merge/ Inner join Voreingestellt bei Pandas. Behalte nur Reihen, bei denen der Merge 'on' Wert im rechten und linken DataFrame existiert.

  • Left Merge/ Left outer join Behalte jede Reihe im linken DataFrame. Wo es fehlende Werte der 'on' Variablen im Rechten DataFrame gibt, füge Nan Werte im resultierenden DataFrame ein.

  • Right Merge/ Right outer join Behalte alle Reihem im rechten DataFrame. Wo es fehlende Werte der 'on' Variablen im der linken Spalte gibt, füge Nans ein.

  • Outer Merge/ Full outer join Alle Reihen beider DataFrames werden zurück gegeben und, wo möglich, verbunden, ansonsten werden Nans eingefügt

In [43]:
# Concat hängt die neuen Spalten rechts an
# df = pd.concat([train, dfw], axis=1, sort=False)
In [44]:
# Darauf achten, dass die Spalten den gleichen Datentyp haben
# Nach der Verwendung von 'outer' Duplikate entfernen
# Reihen sind ungeordnet, neu nach zum Beispiel Datum sortieren
# result = pd.merge(df1, df2, on='ID', how='outer')
In [45]:
# Sicherstellen, dass die Merge-Keys in beiden Datensätzen unique sind
# pd.merge(left, right, validate='one_to_one')

DataFrames zusammenfügen an Reihen

In [46]:
# df = train.append(test, ignore_index = True)
# Wenn es train und test sind, dann vorher  für das Target in test nans einfügen
# test['Target'] = np.nan

DataFrames aus verschiedenen Dateien beim Einlesen zusammmenfügen

In [ ]:
# Reihenweise

# Voraussetzung: gleiche Spalten, gleiche Benennung der Datei mit fortlaufender Zahl am Ende
# from glob import glob
# files = sorted(glob('data/files*.csv'))
# pd.concat((pd.read_csv(file) for file in files))
# pd.concat((pd.read_csv(file) for file in files), ignore_index=True)
In [ ]:
# Spaltenweise

# files = sorted(glob('data/files*.csv'))
# pd.concat((pd.read_csv(file) for file in files), axis=1)

Zufalls-Set aus DataFrame

In [ ]:
# df_1 = df.sample(frac=0.75, random_state = 24)

DataFrame speichern

In [47]:
# df.to_csv('filename.csv', sep=',', encoding='utf-8', index=False)
# df.to_excel
# df.to_html
# df.to_latex
# df.to_csv('data.csv.zip')
In [ ]: