3.0. Wprowadzenie

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Umieszczenie wczytanych informacji w ramce danych.
dataframe = pd.read_csv(url)

# Wyświetlenie pierwszych pięciu wierszy.
dataframe.head(5)





3.1. Tworzenie ramki danych

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie słownika.
dictionary = {
    "Name": ['Jacky Jackson', 'Steven Stevenson'],
    "Age": [38, 25],
    "Driver": [True, False]
}

# Utworzenie obiektu typu DataFrame.
dataframe = pd.DataFrame(dictionary)

# Wyświetlenie obiektu DataFrame.
dataframe





# Dodanie kolumny opisującej kolor oczu.
dataframe["Eyes"] = ["Brown", "Blue"]

# Wyświetlenie obiektu DataFrame.
dataframe





3.2. Opisywanie danych

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Wyświetlenie dwóch pierwszych wierszy.
dataframe.head(2)





# Wyświetlenie wielkości danych.
dataframe.shape

(1313, 6)





# Wyświetlenie pewnych danych statystycznych.
dataframe.describe()





# Wyświetlenie informacji.
dataframe.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 6 columns):
 #   Column    Non-Null Count  Dtype
---  ------    --------------  -----
 0   Name      1313 non-null   object
 1   PClass    1313 non-null   object
 2   Age       756 non-null    float64
 3   Sex       1313 non-null   object
 4   Survived  1313 non-null   int64
 5   SexCode   1313 non-null   int64
dtypes: float64(1), int64(2), object(3)
memory usage: 61.7+ KB





3.3. Poruszanie się po ramce danych

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Pobranie pierwszego wiersza.
dataframe.iloc[0]

Name        Allen, Miss Elisabeth Walton
PClass                               1st
Age                                   29
Sex                               female
Survived                               1
SexCode                                1
Name: 0, dtype: object





# Pobranie trzech wierszy.
dataframe.iloc[1:4]





# Pobranie wierszy do czwartego włącznie.
dataframe.iloc[:4]





# Zdefiniowanie indeksu.
dataframe = dataframe.set_index(dataframe['Name'])

# Wyświetlenie podanego wiersza.
dataframe.loc['Allen, Miss Elisabeth Walton']

Name        Allen, Miss Elisabeth Walton
PClass                               1st
Age                                   29
Sex                               female
Survived                               1
SexCode                                1
Name: Allen, Miss Elisabeth Walton, dtype: object





3.4. Pobieranie wierszy na podstawie pewnych warunków

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Wyświetlenie dwóch pierwszych wierszy, w których kolumna 'Sex' ma wartość 'female'.
dataframe[dataframe['Sex'] == 'female'].head(2)





# Filtrowanie wierszy.
dataframe[(dataframe['Sex'] == 'female') & (dataframe['Age'] >= 65)]





3.5. Sortowanie wartości

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Sortowanie ramki danych według kolumny Age i wyświetlenie dwóch pierwszych wierszy.
dataframe.sort_values(by=["Age"]).head(2)





3.6. Zastępowanie wartości

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Zastąpienie wartości, wyświetlenie dwóch pierwszych wierszy.
dataframe['Sex'].replace("female", "Woman").head(2)

0    Woman
1    Woman
Name: Sex, dtype: object





# Zastąpienie słów "female" i "male" słowami "Woman" i "Man".
dataframe['Sex'].replace(["female", "male"], ["Woman", "Man"]).head(5)

0    Woman
1    Woman
2      Man
3    Woman
4      Man
Name: Sex, dtype: object





# Zastąpienie wartości, wyświetlenie dwóch pierwszych wierszy.
dataframe.replace(1, "One").head(2)





# Zastąpienie wartości, wyświetlenie dwóch pierwszych wierszy.
dataframe.replace(r"1st", "First", regex=True).head(2)





3.7. Zmiana nazwy kolumny

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Zmiana nazwy kolumny, wyświetlenie dwóch pierwszych wierszy.
dataframe.rename(columns={'PClass': 'Passenger Class'}).head(2)





# Zmiana nazwy kolumn, wyświetlenie dwóch pierwszych wierszy.
dataframe.rename(columns={'PClass': 'Passenger Class', 'Sex': 'Gender'}).head(2)





# Wczytanie biblioteki.
import collections

# Utworzenie słownika.
column_names = collections.defaultdict(str)

# Utworzenie kluczy.
for name in dataframe.columns:
    column_names[name]

# Wyświetlenie słownika.
column_names

defaultdict(str,
            {'Age': '',
             'Name': '',
             'PClass': '',
             'Sex': '',
             'SexCode': '',
             'Survived': ''})





3.8. Znajdowanie wartości minimalnej, maksymalnej, sumy, średniej i liczby elementów w kolumnie

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Obliczenie danych statystycznych.
print('Maksimum:', dataframe['Age'].max())
print('Minimum:', dataframe['Age'].min())
print('Średnia:', dataframe['Age'].mean())
print('Suma:', dataframe['Age'].sum())
print('Liczba elementów:', dataframe['Age'].count())

Maksimum: 71.0
Minimum: 0.17
Średnia: 30.397989417989415
Suma: 22980.879999999997
Liczba elementów: 756





# Wyświetlenie liczby elementów w kolumnach.
dataframe.count()

Name        1313
PClass      1313
Age          756
Sex         1313
Survived    1313
SexCode     1313
dtype: int64





3.9. Znajdowanie unikatowych wartości

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Pobranie unikatowych wartości.
dataframe['Sex'].unique()

array(['female', 'male'], dtype=object)





# Wyświetlenie liczby elementów w kolumnach.
dataframe['Sex'].value_counts()

male      851
female    462
Name: Sex, dtype: int64





# Wyświetlenie liczby elementów w kolumnach.
dataframe['PClass'].value_counts()

3rd    711
1st    322
2nd    279
*        1
Name: PClass, dtype: int64





# Wyświetlenie liczby unikatowych wartości.
dataframe['PClass'].nunique()

4





3.10. Obsługa brakujących wartości

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Pobranie i wyświetlenie dwóch wierszy, w których brakuje wartości.
dataframe[dataframe['Age'].isnull()].head(2)





# Próba zastąpienia wartości przez NaN.
dataframe['Sex'] = dataframe['Sex'].replace('male', NaN)

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-7-5682d714f87d> in <module>()
      1 # Próba zastąpienia wartości przez NaN.
----> 2 dataframe['Sex'] = dataframe['Sex'].replace('male', NaN)

NameError: name 'NaN' is not defined
---------------------------------------------------------------------------





# Wczytanie biblioteki.
import numpy as np

# Zastąpienie wartości przez NaN.
dataframe['Sex'] = dataframe['Sex'].replace('male', np.nan)





# Wczytanie danych, przypisanie brakujących wartości.
dataframe = pd.read_csv(url, na_values=[np.nan, 'NONE', -999])





# Pobranie pojedynczego rekordu, w którym brakuje wartości kolumny Age.
null_entry = dataframe[dataframe["Age"].isna()].head(1)

print(null_entry)





# Przypisanie kolumnie o wartości null wartości przedstawiającej średni wiek pasażera Titanica.
null_entry.fillna(dataframe["Age"].mean())





3.11. Usuwanie kolumn

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Usunięcie kolumny.
dataframe.drop('Age', axis=1).head(2)





# Usunięcie kolumn.
dataframe.drop(['Age', 'Sex'], axis=1).head(2)





# Usunięcie kolumny.
dataframe.drop(dataframe.columns[1], axis=1).head(2)





# Utworzenie nowego obiektu typu DataFrame.
dataframe_name_dropped = dataframe.drop(dataframe.columns[0], axis=1)





3.12. Usuwanie wiersza

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Usunięcie wierszy, wyświetlenie dwóch pierwszych wierszy danych wyjściowych.
dataframe[dataframe['Sex'] != 'male'].head(3)





# Usunięcie wiersza, wyświetlenie dwóch pierwszych wierszy danych wyjściowych.
dataframe[dataframe['Name'] != 'Allison, Miss Helen Loraine'].head(2)





# Usunięcie wiersza, wyświetlenie dwóch pierwszych wierszy danych wyjściowych.
dataframe[dataframe.index != 0].head(2)





3.13. Usuwanie powielonych wierszy

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Usunięcie powielonych wierszy, wyświetlenie dwóch pierwszych wierszy danych wyjściowych.
dataframe.drop_duplicates().head(2)





# Wyświetlenie liczby wierszy.
print("Liczba wierszy w początkowym obiekcie DataFrame:", len(dataframe))
print("Liczba wierszy po przeprowadzeniu operacji:", len(dataframe.drop_duplicates()))

Liczba wierszy w początkowym obiekcie DataFrame: 1313
Liczba wierszy po przeprowadzeniu operacji: 1313





# Usunięcie powielonych wierszy.
dataframe.drop_duplicates(subset=['Sex'])





# Usunięcie powielonych wierszy.
dataframe.drop_duplicates(subset=['Sex'], keep='last')





dataframe.duplicated()

0       False
1       False
2       False
3       False
4       False
        ...
1308    False
1309    False
1310    False
1311    False
1312    False
Length: 1313, dtype: bool





3.14. Grupowanie wierszy według wartości

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Grupowanie wierszy według wartości kolumny 'Sex'
# i obliczenie średniej w poszczególnych grupach.
dataframe.groupby('Sex').mean(numeric_only=True)





# Grupowanie wierszy.
dataframe.groupby('Sex')

<pandas.core.groupby.DataFrameGroupBy object at 0x10efacf28>





# Grupowanie wierszy, a następnie ich zliczenie.
dataframe.groupby('Survived')['Name'].count()

Survived
0    863
1    450
Name: Name, dtype: int64





# Grupowanie wierszy, obliczenie średniej.
dataframe.groupby(['Sex','Survived'])['Age'].mean()

Sex     Survived
female  0           24.901408
        1           30.867143
male    0           32.320780
        1           25.951875
Name: Age, dtype: float64





3.15. Grupowanie wierszy według czasu

# Wczytanie bibliotek.
import pandas as pd
import numpy as np

# Utworzenie przedziału czasu.
time_index = pd.date_range('06/06/2017', periods=100000, freq='30S')

# Utworzenie obiektu typu DataFrame.
dataframe = pd.DataFrame(index=time_index)

# Utworzenie kolumny losowo wybranych wartości.
dataframe['Sale_Amount'] = np.random.randint(1, 10, 100000)

# Grupowanie wierszy według tygodnia, obliczenie sumy dla danego tygodnia.
dataframe.resample('W').sum()





# Wyświetlenie trzech pierwszych wierszy.
dataframe.head(3)





# Grupowanie według dwóch tygodni, obliczenie średniej.
dataframe.resample('2W').mean()





# Grupowanie według miesiąca, obliczenie liczby wierszy.
dataframe.resample('M').count()





# Grupowanie według miesiąca, obliczenie liczby wierszy.
dataframe.resample('M', label='left').count()





3.16. Agregowanie operacji i danych statystycznych

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Pobranie wartości minimalnej każdej kolumny.
dataframe.agg("min")

Name        Abbing, Mr Anthony
PClass                       *
Age                       0.17
Sex                     female
Survived                     0
SexCode                      0
dtype: object





# Wartość średnia kolumny Age oraz wartości minimalna i maksymalna kolumny Sex.
dataframe.agg({"Age":["mean"], "SexCode":["min", "max"]})





# Liczba pasażerów w poszczególnych klasach, którzy przeżyli i nie przeżyli katastrofy Titanica.
dataframe.groupby(
    ["PClass","Survived"]).agg({"Survived":["count"]}
  ).reset_index()





3.17. Iterowanie przez kolumnę

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Wyświetlenie wielkimi literami imienia i nazwiska dwóch pierwszych pasażerów.
for name in dataframe['Name'][0:2]:
    print(name.upper())

ALLEN, MISS ELISABETH WALTON
ALLISON, MISS HELEN LORAINE





# Wyświetlenie wielkimi literami imienia i nazwiska dwóch pierwszych pasażerów.
[name.upper() for name in dataframe['Name'][0:2]]

['ALLEN, MISS ELISABETH WALTON', 'ALLISON, MISS HELEN LORAINE']





3.18. Wywoływanie funkcji dla wszystkich elementów kolumny

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Utworzenie funkcji.
def uppercase(x):
    return x.upper()

# Wywołanie funkcji, wyświetlenie dwóch pierwszych wierszy.
dataframe['Name'].apply(uppercase)[0:2]

0    ALLEN, MISS ELISABETH WALTON
1     ALLISON, MISS HELEN LORAINE
Name: Name, dtype: object





3.19. Wywoływanie funkcji dla grupy

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie adresu URL.
url = 'https://raw.githubusercontent.com/chrisalbon/sim_data/master/titanic.csv'

# Wczytanie danych.
dataframe = pd.read_csv(url)

# Grupowanie wierszy, wywołanie funkcji w grupach.
dataframe.groupby('Sex').apply(lambda x: x.count())





3.20. Konkatenacja obiektów typu DataFrame

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu typu DataFrame.
data_a = {'id': ['1', '2', '3'],
          'first': ['Alex', 'Amy', 'Allen'],
          'last': ['Anderson', 'Ackerman', 'Ali']}
dataframe_a = pd.DataFrame(data_a, columns = ['id', 'first', 'last'])

# Utworzenie obiektu typu DataFrame.
data_b = {'id': ['4', '5', '6'],
          'first': ['Billy', 'Brian', 'Bran'],
          'last': ['Bonder', 'Black', 'Balwner']}
dataframe_b = pd.DataFrame(data_b, columns = ['id', 'first', 'last'])

# Konkatenacja obiektów DataFrame na podstawie wierszy.
pd.concat([dataframe_a, dataframe_b], axis=0)





# Konkatenacja obiektów DataFrame na podstawie kolumn.
pd.concat([dataframe_a, dataframe_b], axis=1)





3.21. Złączanie obiektów typu DataFrame

# Wczytanie biblioteki.
import pandas as pd

# Utworzenie obiektu typu DataFrame.
employee_data = {'employee_id': ['1', '2', '3', '4'],
                 'name': ['Amy Jones', 'Allen Keys', 'Alice Bees',
                 'Tim Horton']}
dataframe_employees = pd.DataFrame(employee_data, columns = ['employee_id',
                                                             'name'])

# Utworzenie obiektu typu DataFrame.
sales_data = {'employee_id': ['3', '4', '5', '6'],
              'total_sales': [23456, 2512, 2345, 1455]}
dataframe_sales = pd.DataFrame(sales_data, columns = ['employee_id',
                                                      'total_sales'])

# Złączenie obiektów typu DataFrame.
pd.merge(dataframe_employees, dataframe_sales, on='employee_id')





# Złączenie obiektów typu DataFrame.
pd.merge(dataframe_employees, dataframe_sales, on='employee_id', how='outer')





# Złączenie obiektów typu DataFrame.
pd.merge(dataframe_employees, dataframe_sales, on='employee_id', how='left')





# Złączenie obiektów typu DataFrame.
pd.merge(dataframe_employees,
         dataframe_sales,
         left_on='employee_id',
         right_on='employee_id')
