%Schriftgröße, Layout, Papierformat, Art des Dokumentes
%\documentclass[10pt,oneside,a4paper]{scrartcl}
\documentclass[10pt,oneside,a4paper,headsepline,footsepline]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
% Funktioniert nicht \usepackage[automark]{scrpage2}%
\usepackage[automark]{scrlayer-scrpage}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

%Spalten
\usepackage{multicol}

% Single quotes
\usepackage{upquote,textcomp}

%Kopfzeile
\ihead{Python}
\chead{}
\ohead{http://kohnlehome.de/python/pandas.pdf}
%\setheadsepline{0.5pt}

%Fußzeile
%\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
    \LARGE % Schriftgröße
    \bfseries % Fettdruck
    \sffamily % Serifenlose Schrift
    Python: Pandas
\end{center}


\section{Installieren in Anaconda}
\begin{verbatim}
conda install pandas
\end{verbatim}

\section{Importieren}
\begin{verbatim}
import pandas as pd
\end{verbatim}

\section{pandas.Series (Array, Spalte einer Tabelle)}
\subsection{Series-Objekt aus einer Liste erstellen}
\subsubsection*{a) mit index: 0, 1, 2, ...}
\begin{verbatim}
alter = [28, 19, 25, 35, 19]
series = pd.Series(alter)
\end{verbatim}

\subsubsection*{b) mit Labels (index: ''Emma'', ''Anna'', ''Berta'', ''Carla'', ''Dieter'' )}
\begin{verbatim}
alter = [28, 19, 25, 35, 19]
labels = ["Emma","Anna","Berta","Carla","Dieter"]
series = pd.Series(alter, index=labels)
\end{verbatim}

\subsection{Statistik}
\subsubsection*{Beschreibung der Tabelle}
\begin{verbatim}
series.describe()
\end{verbatim}

\subsubsection*{Anzahl unique values}
\begin{verbatim}
series.value_counts()
\end{verbatim}

\subsection{Sortieren}
\subsubsection*{a) nach Werten}
\begin{verbatim}
series.sort_values()
\end{verbatim}

\subsubsection*{b) nach Index}
\begin{verbatim}
series.sort_index()
\end{verbatim}

\subsection{Balkendiagramm}
\begin{verbatim}
conda install matplotlib
\end{verbatim}

\begin{verbatim}
series.plot(kind='bar')
\end{verbatim}


\section{pandas.DataFrame (Tabelle)}
\subsection{DataFrame erstellen}
\subsubsection*{a) DataFrame aus Dictionary erstellen}
\begin{verbatim}
df = pd.DataFrame({ 
    'Name': ['Anna', 'Carla', 'Dieter'],
    'Alter': [25, 27, 22]
    })
\end{verbatim}

\subsubsection*{b) DataFrame aus CSV-Datei erstellen}
\begin{verbatim}
df = pd.read_csv('daten.csv')
\end{verbatim}

\subsection{DataFrame verändern}
\subsubsection*{Eine Spalte als Index auswählen}
\begin{verbatim}
df.set_index('Spalte')
\end{verbatim}

\subsubsection*{Spalte hinzufügen}
\begin{verbatim}
df['Neue-Spalte'] = df['Spalte'] * 2
\end{verbatim}

\subsection{DataFrame analysieren}
\subsubsection*{Zeilen sortieren}
\begin{verbatim}
df.sort_index()  
df.sort_values(by='Spalte')
\end{verbatim}

\subsubsection*{Aggregatfunktionen}
\begin{verbatim}
df.sum()
df.mean()
\end{verbatim}

\subsubsection*{Filter (Zeilen)}
\begin{verbatim}
df.loc['Zeile'] 
df.loc[['Zeile1','Zeile2']]
 
df[df['Spalte'] > 21]
df[df.Spalte > 21]
df.query(Spalte1 > 21 and Spalte2 == 35)
df[(df.Spalte1 > 21) & (df.Spalte2 == 35)]
\end{verbatim}

\subsubsection*{Projektion (Spalten)}
\begin{verbatim}
df['Spalte']
df.Spalte
df[['Spalte1','Spalte2']]
\end{verbatim}

\subsubsection*{Filter und Projektion}
\begin{verbatim}
df.loc[['Zeile1','Zeile2']][['Spalte1','Spalte2']]
\end{verbatim}

\subsubsection*{Gruppieren}
\begin{verbatim}
df.groupby('Spalte').sum()
df.groupby('Spalte').mean()
\end{verbatim}


\end{document}
