[PYTHON] Ich habe die grundlegende Operation von Pandas im Jupyter Lab geschrieben (Teil 2).

14 ..

Über NaN von DataFrame

import numpy as np
import pandas as pd
df = pd.read_csv('train.csv')
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

Alle Datensätze, die NaN enthalten, wurden gelöscht. (Index bleibt gleich. Grundsätzlich wird der Index nur neu zugewiesen, wenn .reset_index ()

df.dropna().head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
6 7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S
10 11 1 3 Sandstrom, Miss. Marguerite Rut female 4.0 1 1 PP 9549 16.7000 G6 S
11 12 1 1 Bonnell, Miss. Elizabeth female 58.0 0 0 113783 26.5500 C103 S

Sie können eine Spalte mit NaN löschen, indem Sie Achse = 1 als Argument verwenden (Standard ist Linie mit Achse = 0).

nicht sehr oft verwenden. Beim Erstellen eines Modells wird es in der Strategie verwendet, die Variablen (erklärende Variablen) zu reduzieren, die die Daten erklären, ohne die Anzahl der Daten zu verringern. Es ist jedoch unwahrscheinlich, dass "die erklärenden Variablen reduziert werden, weil es sogar ein NaN gibt". .. Welche erklärenden Variablen für die Modellbildung wichtig sind, ist eine sehr wichtige und sorgfältige Frage.
df.dropna(axis=1) .head()
PassengerId Survived Pclass Name Sex SibSp Parch Ticket Fare
0 1 0 3 Braund, Mr. Owen Harris male 1 0 A/5 21171 7.2500
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 1 0 PC 17599 71.2833
2 3 1 3 Heikkinen, Miss. Laina female 0 0 STON/O2. 3101282 7.9250
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 1 0 113803 53.1000
4 5 0 3 Allen, Mr. William Henry male 0 0 373450 8.0500

Durch Übergeben einer Liste von Spaltennamen an das Teilmengenargument werden nur die Zeilen gelöscht, die NaN in dieser Spalte enthalten.

Sie müssen nur die NaN-Zeile in einer bestimmten Spalte ablegen. Denken Sie daran, es ist sehr praktisch.

Natürlich überschreibt .dropna () den ursprünglichen df nicht. Wenn Sie das ursprüngliche df aktualisieren möchten, weisen Sie es dem vertrauten inplace = True oder df = df.dropna () zu.

df.dropna(subset=['Age']).head() ###index=888 wird fallen gelassen.
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

.fillna(value)

Weisen Sie NaN einen bestimmten Wert zu.

df.fillna('THIS IS IT').head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.2500 THIS IS IT S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.9250 THIS IS IT S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.0500 THIS IS IT S

Ersetzen Sie NaN in einer bestimmten Spalte durch den Spaltenmittelwert

df['Age'].mean()
29.69911764705882
df['Age'].fillna(df['Age'].mean()).head()
0    22.0
1    38.0
2    26.0
3    35.0
4    35.0
Name: Age, dtype: float64
df['Age'] = df['Age'].fillna(df['Age'].mean())
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
pd.isna(df).head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 False False False False False False False False False False True False
1 False False False False False False False False False False False False
2 False False False False False False False False False False True False
3 False False False False False False False False False False False False
4 False False False False False False False False False False True False

Ersetzen Sie das NaN-Beurteilungsergebnis von Cabin durch die Spalte Cabin_nan

df['Cabin_nan'] = pd.isna(df['Cabin']) df

15 ..

groupby mit .groupby () function ()

df = pd.read_csv('train.csv')
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

Gruppieren Sie nach in Klasse

Da df.groupby ('Pclass') allein nicht weiß, was nach dem Gruppieren und Gruppieren zu tun ist, rufen Sie Funktionen wie .mean () und .count () auf.

df.groupby('Pclass').mean()
PassengerId Survived Age SibSp Parch Fare
Pclass
1 461.597222 0.629630 38.233441 0.416667 0.356481 84.154687
2 445.956522 0.472826 29.877630 0.402174 0.380435 20.662183
3 439.154786 0.242363 25.140620 0.615071 0.393075 13.675550
df = df[df['Pclass']==1]
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
6 7 0 1 McCarthy, Mr. Timothy J male 54.0 0 0 17463 51.8625 E46 S
11 12 1 1 Bonnell, Miss. Elizabeth female 58.0 0 0 113783 26.5500 C103 S
23 24 1 1 Sloper, Mr. William Thompson male 28.0 0 0 113788 35.5000 A6 S

Nehmen Sie Statistiken für jede Spalte mit 'Klasse' == 1

df[df['Pclass']==1].describe()
PassengerId Survived Pclass Age SibSp Parch Fare
count 216.000000 216.000000 216.0 186.000000 216.000000 216.000000 216.000000
mean 461.597222 0.629630 1.0 38.233441 0.416667 0.356481 84.154687
std 246.737616 0.484026 0.0 14.802856 0.611898 0.693997 78.380373
min 2.000000 0.000000 1.0 0.920000 0.000000 0.000000 0.000000
25% 270.750000 0.000000 1.0 27.000000 0.000000 0.000000 30.923950
50% 472.000000 1.000000 1.0 37.000000 0.000000 0.000000 60.287500
75% 670.500000 1.000000 1.0 49.000000 1.000000 0.000000 93.500000
max 890.000000 1.000000 1.0 80.000000 3.000000 4.000000 512.329200

Nur Mittelwert extrahieren

Es ist schwierig, sie einzeln herauszunehmen, daher ist es eine gute Idee, .groupby () zu verwenden, um sie alle zusammen zu sehen.

df[df['Pclass']==1].describe().loc['mean']
PassengerId    461.597222
Survived         0.629630
Pclass           1.000000
Age             38.233441
SibSp            0.416667
Parch            0.356481
Fare            84.154687
Name: mean, dtype: float64

Nehmen Sie nach groupby den im Index angegebenen Wert für by, das erste Argument von groupby,. Im obigen Beispiel ist dies der Wert von Pclass (1, 2, 3). Das Ergebnis von grouby ist natürlich auch ein DataFrame, sodass Sie mit .loc [] eine bestimmte Gruppe von Serien abrufen können.

df.groupby('Pclass').mean().loc[1]
PassengerId    461.597222
Survived         0.629630
Age             38.233441
SibSp            0.416667
Parch            0.356481
Fare            84.154687
Name: 1, dtype: float64
df.groupby('Pclass').count().loc[1] #count()Und Summe()Usw. sind ebenfalls möglich
PassengerId    216
Survived       216
Name           216
Sex            216
Age            186
SibSp          216
Parch          216
Ticket         216
Fare           216
Cabin          176
Embarked       214
Name: 1, dtype: int64
df.groupby('Pclass').describe()
PassengerId Survived Age SibSp Parch Fare
count mean std min 25% 50% 75% max count mean std min 25% 50% 75% max count mean std min 25% 50% 75% max count mean std min 25% 50% 75% max count mean std min 25% 50% 75% max count mean std min 25% 50% 75% max
Pclass
1 216.0 461.597222 246.737616 2.0 270.75 472.0 670.5 890.0 216.0 0.629630 0.484026 0.0 0.0 1.0 1.0 1.0 186.0 38.233441 14.802856 0.92 27.0 37.0 49.0 80.0 216.0 0.416667 0.611898 0.0 0.0 0.0 1.0 3.0 216.0 0.356481 0.693997 0.0 0.0 0.0 0.0 4.0 216.0 84.154687 78.380373 0.0 30.92395 60.2875 93.5 512.3292
2 184.0 445.956522 250.852161 10.0 234.50 435.5 668.0 887.0 184.0 0.472826 0.500623 0.0 0.0 0.0 1.0 1.0 173.0 29.877630 14.001077 0.67 23.0 29.0 36.0 70.0 184.0 0.402174 0.601633 0.0 0.0 0.0 1.0 3.0 184.0 0.380435 0.690963 0.0 0.0 0.0 1.0 3.0 184.0 20.662183 13.417399 0.0 13.00000 14.2500 26.0 73.5000
3 491.0 439.154786 264.441453 1.0 200.00 432.0 666.5 891.0 491.0 0.242363 0.428949 0.0 0.0 0.0 0.0 1.0 355.0 25.140620 12.495398 0.42 18.0 24.0 32.0 74.0 491.0 0.615071 1.374883 0.0 0.0 0.0 1.0 8.0 491.0 0.393075 0.888861 0.0 0.0 0.0 0.0 6.0 491.0 13.675550 11.778142 0.0 7.75000 8.0500 15.5 69.5500
df.groupby('Pclass').describe()['Age'] #Ich habe nur Age rausgenommen
count mean std min 25% 50% 75% max
Pclass
1 186.0 38.233441 14.802856 0.92 27.0 37.0 49.0 80.0
2 173.0 29.877630 14.001077 0.67 23.0 29.0 36.0 70.0
3 355.0 25.140620 12.495398 0.42 18.0 24.0 32.0 74.0

Wenn in Jupyter die Spalten und Zeilen des DataFrame nicht angezeigt werden können, werden sie weggelassen.

Wenn Sie alle Spalten (oder alle Zeilen) anzeigen möchten, ohne sie wegzulassen, können Sie verhindern, dass sie weggelassen werden, indem Sie Folgendes ausführen.

#Anzeige ohne Auslassen von Spalten
pd.set_option('display.max_columns', None)
#Anzeige ohne Auslassen von Linien
pd.set_option('display.max_rows', None)

Drehen Sie das Ergebnis der Gruppe mit einer for-Anweisung um

for i, group_df in df.groupby('Pclass'):
    print("{}: group_df's type is {} and has {}".format(i, type(group_df), len(group_df)))
1: group_df's type is <class 'pandas.core.frame.DataFrame'> and has 216
2: group_df's type is <class 'pandas.core.frame.DataFrame'> and has 184
3: group_df's type is <class 'pandas.core.frame.DataFrame'> and has 491

Nummerieren Sie den höchsten Tarif für jeden Datensatz in jeder Pclass-Gruppe

df = pd.read_csv('train.csv')
results = []
for i, group_df in df.groupby('Pclass'):
    sorted_group_df = group_df.sort_values('Fare')
    sorted_group_df['RankInClass'] = np.arange(len(sorted_group_df))
    results.append(sorted_group_df)

results_df = pd.concat(results)
results_df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked RankInClass
633 634 0 1 Parr, Mr. William Henry Marsh male NaN 0 0 112052 0.0 NaN S 0
822 823 0 1 Reuchlin, Jonkheer. John George male 38.0 0 0 19972 0.0 NaN S 1
815 816 0 1 Fry, Mr. Richard male NaN 0 0 112058 0.0 B102 S 2
806 807 0 1 Andrews, Mr. Thomas Jr male 39.0 0 0 112050 0.0 A36 S 3
263 264 0 1 Harrison, Mr. William male 40.0 0 0 112059 0.0 B94 S 4

Tisch verbinden

Es gibt zwei Haupttypen von Tabellenverknüpfungen.

Verbinden Sie sich, indem Sie eine bestimmte Spalte oder einen bestimmten Index als Schlüssel verwenden

Kombinieren Sie DataFrames einfach horizontal (oder vertikal) (oder vertikal).

import pandas as pd
df1 = pd.DataFrame({'Key':['k0','k','k2'],
                   'A':['a0','a1','a2'],
                   'B':['b0','b1','b2']})
df2 = pd.DataFrame({'Key':['k0','k1','k2'],
                   'C':['c0','c2','c3'],
                   'D':['d0','d1','d2']})
df1
Key A B
0 k0 a0 b0
1 k a1 b1
2 k2 a2 b2
df2
Key C D
0 k0 c0 d0
1 k1 c2 d1
2 k2 c3 d2

Beide haben eine Spalte namens "Key" und ihre Werte sind gleich.

Die anderen Spalten haben unterschiedliche Werte. Diese Spalte mit dem Namen "Schlüssel" wird als Schlüssel verwendet, um zwei DataFrames horizontal zu verbinden. Verwenden Sie zum Zusammenführen .merge ().

df1.merge(df2)
Key A B C D
0 k0 a0 b0 c0 d0
1 k2 a2 b2 c3 d2

Kombinieren Sie DataFrames einfach horizontal (oder vertikal) (oder vertikal).

Verwenden Sie pd.concat () concat = concatenate

#Vertikal (oft verwendet)
pd.concat([df1,df2], axis=0) #Der Standardwert ist Achse=0
/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:2: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.
A B C D Key
0 a0 b0 NaN NaN k0
1 a1 b1 NaN NaN k
2 a2 b2 NaN NaN k2
0 NaN NaN c0 d0 k0
1 NaN NaN c2 d1 k1
2 NaN NaN c3 d2 k2
#Seite
pd.concat([df1,df2], axis=1)
Key A B Key C D
0 k0 a0 b0 k0 c0 d0
1 k a1 b1 k1 c2 d1
2 k2 a2 b2 k2 c3 d2

16 ..

Verwendung von .merge ()

wie: Wie kombiniert man → {'links', 'rechts', 'außen', 'inner'}, Standard ist 'inner'

Geben Sie die Spalte an, die aktiviert werden soll: key (Spalte, die in beiden DataFrames vorhanden ist). Wenn nicht angegeben, werden sie in einer gemeinsamen Spalte zusammengefasst.

left_on: Spalte, die der Schlüssel des linken DataFrame sein soll

right_on: Spalte als Schlüssel für den richtigen DataFrame

left_index: Geben Sie True an, wenn Sie den linken Schlüssel auf Index setzen

right_index: Geben Sie True an, wenn Sie den Schlüssel für das Indexieren festlegen

how

df1
Key A B
0 k0 a0 b0
1 k a1 b1
2 k2 a2 b2
df2
Key C D
0 k0 c0 d0
1 k1 c2 d1
2 k2 c3 d2
df1.merge(df2, how='left')
Key A B C D
0 k0 a0 b0 c0 d0
1 k a1 b1 NaN NaN
2 k2 a2 b2 c3 d2
df1.merge(df2, how='outer')
Key A B C D
0 k0 a0 b0 c0 d0
1 k a1 b1 NaN NaN
2 k2 a2 b2 c3 d2
3 k1 NaN NaN c2 d1
df1.merge(df2, how='inner')
Key A B C D
0 k0 a0 b0 c0 d0
1 k2 a2 b2 c3 d2

on

Das Argument on gibt an, welche Spalte beim Beitritt als Schlüssel verwendet werden soll. Sie können nur Spalten angeben, die sich sowohl in der linken als auch in der rechten Tabelle befinden.

Wenn es eine gemeinsame Spalte gibt, ist diese Spalte der Schlüssel und wird kombiniert, ohne etwas anzugeben. Geben wir jedoch die Grundlagen an. Es ist leicht zu verstehen und sicher. Es wird oft gesagt, dass "sie in einer unerwarteten Spalte verbunden wurden". Wenn mehrere gemeinsame Spalten vorhanden sind, wissen Sie nicht, welche Spalte verbunden werden soll, und selbst wenn nur eine gemeinsame Spalte vorhanden ist, ist es besser, diese anzugeben. (Da die Beispiele bisher vor der Erklärung von on lagen, habe ich sie absichtlich geschrieben, ohne das Argument on anzugeben.)

Um den Index auf Key zu setzen, setzen Sie right_index und left_index, die später beschrieben werden, auf True. Wenn die Spaltennamen jeder Tabelle (DataFrame) unterschiedlich sind, geben Sie left_on und right_on an, die später beschrieben werden.

df1 = pd.DataFrame({'Key':['k0','k1','k2'],
                    'ID':['aa','bb','cc'],
                   'A':['a0','a1','a2'],
                   'B':['b0','b1','b2']})
df2 = pd.DataFrame({'Key':['k0','k1','k3'],
                    'ID':['aa','bb','cc'],
                   'C':['c0','c1','c3'],
                   'D':['d0','d1','d3']})
df1.merge(df2, on='Key')
Key ID_x A B ID_y C D
0 k0 aa a0 b0 aa c0 d0
1 k1 bb a1 b1 bb c1 d1
df1.merge(df2, on='ID')
Key_x ID A B Key_y C D
0 k0 aa a0 b0 k0 c0 d0
1 k1 bb a1 b1 k1 c1 d1
2 k2 cc a2 b2 k3 c3 d3

Suffix ändern

df1.merge(df2, on='ID', suffixes=('_left', '_right'))
Key_left ID A B Key_right C D
0 k0 aa a0 b0 k0 c0 d0
1 k1 bb a1 b1 k1 c1 d1
2 k2 cc a2 b2 k3 c3 d3

left_on, right_on

Geben Sie dieses Argument an, wenn der Spaltenname, den Sie als Schlüssel verwenden möchten, zwischen links und rechts unterschiedlich ist.

df1 = pd.DataFrame({'Key1':['k0','k1','k2'],
                   'A':['a0','a1','a2'],
                   'B':['b0','b1','b2']})
df2 = pd.DataFrame({'Key2':['k0','k1','k3'],
                   'C':['c0','c1','c3'],
                   'D':['d0','d1','d3']})
df1.merge(df2, left_on='Key1', right_on='Key2')
Key1 A B Key2 C D
0 k0 a0 b0 k0 c0 d0
1 k1 a1 b1 k1 c1 d1

left_index, right_index

Wenn Sie Index als Schlüssel anstelle von Spalte angeben möchten, geben Sie True für left_index und right_index an.

df1.merge(df2, left_index=True, right_index=True)
Key1 A B Key2 C D
0 k0 a0 b0 k0 c0 d0
1 k1 a1 b1 k1 c1 d1
2 k2 a2 b2 k3 c3 d3

join

Wenn Sie die Join-Funktion verwenden, wird sie nach Index verknüpft, Sie müssen sich jedoch nicht daran erinnern, da Sie mit Merge fast dasselbe tun können.

df1 = pd.DataFrame({'Key1':['k0','k1','k2'],
                   'A':['a0','a1','a2'],
                   'B':['b0','b1','b2']})
df2 = pd.DataFrame({'Key2':['k0','k1','k3'],
                   'C':['c0','c1','c3'],
                   'D':['d0','d1','d3']})
df1.join(df2)
Key1 A B Key2 C D
0 k0 a0 b0 k0 c0 d0
1 k1 a1 b1 k1 c1 d1
2 k2 a2 b2 k3 c3 d3
df1.merge(df2, left_index=True, right_index=True)
Key1 A B Key2 C D
0 k0 a0 b0 k0 c0 d0
1 k1 a1 b1 k1 c1 d1
2 k2 a2 b2 k3 c3 d3
df1 = pd.DataFrame({'Key1':['k0','k1','k2'],
                   'A':['a0','a1','a2'],
                   'B':['b0','b1','b2']})
df2 = pd.DataFrame({'Key2':['k0','k1','k3'],
                   'C':['c0','c1','c3'],
                   'D':['d0','d1','d3']})
df3 = pd.DataFrame({'Key3':['k0','k1','k4'],
                   'E':['c0','c1','c3'],
                   'F':['d0','d1','d3']})
df1.join([df2, df3])
Key1 A B Key2 C D Key3 E F
0 k0 a0 b0 k0 c0 d0 k0 c0 d0
1 k1 a1 b1 k1 c1 d1 k1 c1 d1
2 k2 a2 b2 k3 c3 d3 k4 c3 d3

17 ..

.unique() .nunique()

import pandas as pd
df = pd.read_csv('train.csv')
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
df['Pclass'].unique()
array([3, 1, 2])
df['Pclass'].nunique()
3

.value_counts()

df['Pclass'].value_counts()
3    491
1    216
2    184
Name: Pclass, dtype: int64

(Super wichtig) .apply ()

Mit der Funktion apply () können Sie alle Datensätze in einem DataFrame verarbeiten und die Ergebnisse in einer separaten Spalte speichern. Es ist ein Bild, das die Verarbeitung auf jede Zeile anwendet

def get_age_group(age):
    return str(age)[0] + '0s'

get_age_group(45)
'40s'
df = pd.DataFrame({'name':['John','Mike','Emily'],
                  'age':['23','36','42']})
df
name age
0 John 23
1 Mike 36
2 Emily 42
df['age'].apply(get_age_group)
0    20s
1    30s
2    40s
Name: age, dtype: object

Verwendung von .apply () mit Lambda-Funktion

#Weisen Sie der Variablen f in der Lambda-Funktion zu
f = lambda x: str(x)[0] + '0s'
#Setzen Sie 43 als Probe
f(43)
'40s'
df['age_group'] = df['age'].apply(lambda x: str(x)[0] + '0s')
df
name age age_group
0 John 23 20s
1 Mike 36 30s
2 Emily 42 40s

Verwendung von .apply () für den gesamten Datensatz

df = pd.DataFrame({'name':['John','Mike','Emily'],
                  'age':['23','36','42']})
df['description'] = df.apply(lambda row:'{} is {} years old'.format(row['name'], row['age']), axis=1)
df
name age description
0 John 23 John is 23 years old
1 Mike 36 Mike is 36 years old
2 Emily 42 Emily is 42 years old

18 ..

Speichern Sie DataFrame im CSV-Format mit .to_csv ()

df = pd.read_csv('train.csv')
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
df['Adult'] = df['Age'].apply(lambda x: x>20)
df.tail()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Adult
886 887 0 2 Montvila, Rev. Juozas male 27.0 0 0 211536 13.00 NaN S True
887 888 1 1 Graham, Miss. Margaret Edith female 19.0 0 0 112053 30.00 B42 S False
888 889 0 3 Johnston, Miss. Catherine Helen "Carrie" female NaN 1 2 W./C. 6607 23.45 NaN S False
889 890 1 1 Behr, Mr. Karl Howell male 26.0 0 0 111369 30.00 C148 C True
890 891 0 3 Dooley, Mr. Patrick male 32.0 0 0 370376 7.75 NaN Q True
df.to_csv('train_w_adult.csv')
df = pd.read_csv('train_w_adult.csv')
df.head(3)
Unnamed: 0 PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Adult
0 0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S True
1 1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C True
2 2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S True

Mit Blick auf das Ergebnis von df.head (3) werden die Indexinformationen, als sie das letzte Mal gespeichert wurden, in der mysteriösen Spalte "Unbenannt: 0" gespeichert.

Wenn Sie in .to_csv () index = False angeben, müssen Sie den Index nicht speichern. Geben Sie grundsätzlich immer index = False an und speichern Sie es im CSV-Format.

Beachten Sie, dass dieselbe Datei, die bereits im Speicherziel vorhanden ist, überschrieben wird.

df = pd.read_csv('train.csv')
df['Adult'] = df['Age'].apply(lambda x: x>20)
df.to_csv('train_w_adult.csv', index=False)
df = pd.read_csv('train_w_adult.csv')
df.head(3)
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Adult
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S True
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C True
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S True
df = pd.DataFrame({'A':[['a', 'b'], 2, 3], 'B':[['c', 'd'], 5, 6]})
df
A B
0 [a, b] [c, d]
1 2 5
2 3 6
#Stellen Sie sicher, dass die gespeicherten Werte eine Liste sind.
type(df['A'].iloc[0])
list
#Speichern Sie mit csv
df.to_csv('temp.csv', index=False)
#Laden Sie die gespeicherte CSV
df = pd.read_csv('temp.csv')
df
A B
0 ['a', 'b'] ['c', 'd']
1 2 5
2 3 6
type(df['A'].iloc[0])
str

Iterieren Sie DataFrame mit .iterrows ()

Es wird verwendet, wenn ein DataFrame mit einer for-Anweisung iteriert wird. Es ist schwer zu merken, aber da "Zeilen" "Iteration" ist, erinnern wir uns an iter + row + s. Da es mit for gedreht werden kann, nehmen wir an, dass es mehrere s gibt.

"Iteration" bedeutet, den Vorgang zu wiederholen. Es ist eine Schleife. Wenn es sich beispielsweise um eine Liste handelt, kann sie mit i in list iteriert werden: (siehe Teil 4).

In DataFrame können Sie nicht direkt für i in df sagen: wie eine Liste. Schreiben Sie wie folgt mit einer Funktion namens .iterrows ().

df = pd.read_csv('train.csv')
for idx, row in df.iterrows():
    if row['Age'] > 40 and row['Pclass'] == 3 and row['Sex'] == 'male' and row['Survived'] == 1:
        print('{} is very lucky guy...!'.format(row['Name']))
Dahl, Mr. Karl Edwart is very lucky guy...!
Sundman, Mr. Johan Julian is very lucky guy...!

In .apply () wird es häufig verwendet, wenn das Ergebnis der Verarbeitung jedes Datensatzes in einer anderen Spalte gespeichert wird, und in dieser .iterows () wird es häufig verwendet, wenn Sie nur verarbeiten möchten, anstatt einen Wert zurückzugeben.

Beispielsweise wird der Dateipfad in DataFrame gespeichert und .iterrows () wird zum Verschieben oder Lesen der Datei verwendet.

Sortieren Sie nach einer bestimmten Spalte mit .sort_values ()

#Nach Alter sortieren
df.sort_values('Age')
df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

Erstellen Sie eine Pivot-Tabelle mit .pivot_table ()

data = {'Data':['Jan-1','Jan-1','Jan-1','Jan-2','Jan-2','Jan-2'],
       'User':['Emily', 'John','Nick','Kevin','Emily','John'],
       'Method':['Card','Card','Cash','Card','Cash','Cash'],
       'Price':[100,250,200,460,200,130]}
df = pd.DataFrame(data)
df
Data User Method Price
0 Jan-1 Emily Card 100
1 Jan-1 John Card 250
2 Jan-1 Nick Cash 200
3 Jan-2 Kevin Card 460
4 Jan-2 Emily Cash 200
5 Jan-2 John Cash 130

Geben Sie unter Werte die Spalte ein, die Sie aggregieren möchten. Diesmal ist es Preis.

Zunächst wird in jede Zelle der durch Werte angegebene Wert (in diesem Fall Preis) eingegeben. Dies ist die Spalte, die Sie aggregieren möchten.

Übergeben Sie andererseits einfach die Spalten, für die Sie Index und Spalten in einer Liste angeben möchten.

df.pivot_table(values='Price', index=['Data', 'User'], columns=['Method'])
Method Card Cash
Data User
Jan-1 Emily 100.0 NaN
John 250.0 NaN
Nick NaN 200.0
Jan-2 Emily NaN 200.0
John NaN 130.0
Kevin 460.0 NaN
df.pivot_table(values='Price', index=['Data', 'Method'], columns=['User'])
User Emily John Kevin Nick
Data Method
Jan-1 Card 100.0 250.0 NaN NaN
Cash NaN NaN NaN 200.0
Jan-2 Card NaN NaN 460.0 NaN
Cash 200.0 130.0 NaN NaN

Klären Sie zuerst "welche Spalte Sie aggregieren möchten" und fügen Sie diese Spalte in Werte ein. Fügen Sie dann einfach die gewünschten Informationen in Index und Spalten ein.

Querschnittsoperation mit .xs ()

.xs () ist eine Abkürzung für Querschnitt. Ich benutze auch nicht so viel, aber es ist praktisch, wenn ich mit DataFrames arbeite, die mehrere Indizes haben, wie z. B. Pivots. Es ist eine gute Idee, sich zusammen mit dem Drehpunkt daran zu erinnern.

Was Sie mit dieser .xs () tun müssen, ist, sie in der obigen Pivot-Tabelle zu verwenden, wenn Sie beispielsweise nur die Zeile "Karte" extrahieren möchten. (Genauer Querschnitt)

#pivot.xs('Card', level = 'Method')

Recommended Posts

Ich habe die Grundoperation von Pandas im Jupyter Lab geschrieben (Teil 1)
Ich habe die grundlegende Operation von Pandas im Jupyter Lab geschrieben (Teil 2).
Ich habe die Grundoperation von matplotlib in Jupyter Lab geschrieben
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Ich habe die Grundoperation von Seaborn im Jupyter Lab geschrieben
Grundlegende Bedienung von Pandas
Grundlegende Bedienung von Pandas
Ich habe mit Kaggle Start Book basierend auf Kaggle studiert [Teil 1]
Erstellen Sie eine Ausführungsumgebung für Jupyter Lab
Ich habe einen Fehler beim Abrufen der Hierarchie mit MultiIndex von Pandas gemacht
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Automatischer Betrieb von Chrome mit Python + Selen + Pandas
Ich habe die Liste der Tastenkombinationen von Jupyter überprüft
Füllen Sie die Breite des Jupyter-Notizbuchs, um den Browser zu füllen
Grundlegende Bedienung von Python Pandas Series und Dataframe (1)
Ich habe den gleitenden Durchschnitt des IIR-Filtertyps mit Pandas und Scipy verglichen
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Ich möchte die Standortinformationen von GTFS Realtime auf Jupyter zeichnen! (Mit Ballon)
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Zeichnen auf Jupyter mit der Plot-Funktion von Pandas
Ich habe die Leistung von 1 Million Dokumenten mit mongoDB gemessen
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Ich habe versucht, den negativen Teil von Meros zu löschen
Holen Sie sich mit Python den Betriebsstatus von JR West
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe dir geschrieben, dass du das Signal mit Go sehen sollst
Ich schrieb einen Test in "Ich habe versucht, die Wahrscheinlichkeit eines Bingospiels mit Python zu simulieren".
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe den Code für die japanische Satzgenerierung mit DeZero geschrieben
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Formatieren Sie die Zeitachse des Pandas-Zeitreihendiagramms mit matplotlib neu
Ich habe versucht, den FloodFill-Algorithmus mit TRON BATTLE von CodinGame zu implementieren
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Ich habe GP mit Numpy geschrieben
Python-Anwendung: Pandas Teil 1: Basic
Ändern Sie das Thema von Jupyter
Zusammenfassung der grundlegenden Verwendung von Pandas
Die Kraft der Pandas: Python
Grundlegende Berechnung von Pandas, um Hakone Ekiden zu genießen und gleichzeitig mit den besten Mitgliedern aller Zeiten zu konkurrieren
Teil 1 Ich habe die Antwort auf das Referenzproblem geschrieben, wie man in Python in Echtzeit offline schreibt
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part2 zu bedienen
Ich habe versucht, eine eigenständige Bereitstellung von Play with Fabric [AWS-Operation mit Boto] [Play Deployment] durchzuführen.
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part1 zu bedienen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich habe das Bild der Science University auf Twitter mit Word2Vec überprüft.
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern