4.25. DataFrame Join

../../_images/sql-joins1.png

Figure 76. Joins

import numpy as np
import pandas as pd

np.random.seed(0)


values = np.random.randn(6, 4)
columns = ['A', 'B', 'C', 'D']
indexes = pd.date_range('1970-01-01', periods=6)
# DatetimeIndex(['1970-01-01',
#                '1970-01-02',
#                '1970-01-03',
#                '1970-01-04',
#                '1970-01-05',
#                '1970-01-06'], dtype='datetime64[ns]', freq='D')

df1 = pd.DataFrame(values, index=indexes, columns=columns)
df2 = pd.DataFrame([ {'A': 1, 'B': 2},
                     {'C': 3}])

4.25.1. Left Join

df1.join(df2, how='left', rsuffix='_2')  # gdyby była kolizja nazw kolumn, to dodaj suffix '_2'
df1.merge(df2, right_index=True, left_index=True, how='left', suffixes=('', '_2'))

4.25.2. Outer Join

df1.merge(df2)
df1.merge(df2, how='outer')

4.25.3. Append

  • jak robi appenda, to nie zmienia indeksów (uwaga na indeksy powtórzone)

  • nowy dataframe będzie miał kolejne indeksy

df1.append(df2)
df1.append(df2, ignore_index=True)

4.25.4. Concat

  • Przydatne przy łączeniu dataframe wczytanych z wielu plików

pd.concat([df1, df2])
pd.concat([df1, df2], ignore_index=True)
pd.concat([df1, df2], join='inner')

4.25.4.1. Assignments

4.25.5. EVA

  • Complexity level: medium

  • Lines of code to write: 25 lines

  • Estimated time of completion: 30 min

  • Filename: solution/pandas_df_eva.py

  1. Na podstawie podanych URL:

  2. Scrappuj stronę wykorzystując pandas.read_html()

  3. Połącz dane wykorzystując pd.concat

  4. Przygotuj plik CSV z danymi dotyczącymi spacerów kosmicznych