5.31. DataFrame Cleaning

5.31.1. Cleaning User Input

  • 80% of machine learning and data science is cleaning data

5.31.1.1. Is This the Same Address?

  • This is a dump of distinct records of a single address

  • Which one of the below is a true address?

'ul. Jana III Sobieskiego'
'ul Jana III Sobieskiego'
'ul.Jana III Sobieskiego'
'ulicaJana III Sobieskiego'
'Ul. Jana III Sobieskiego'
'UL. Jana III Sobieskiego'
'ulica Jana III Sobieskiego'
'Ulica. Jana III Sobieskiego'

'os. Jana III Sobieskiego'

'Jana 3 Sobieskiego'
'Jana 3ego Sobieskiego'
'Jana III Sobieskiego'
'Jana Iii Sobieskiego'
'Jana IIi Sobieskiego'
'Jana lll Sobieskiego'  # three small letters 'L'

5.31.1.2. Spelling and Abbreviations

'ul'
'ul.'
'Ul.'
'UL.'
'ulica'
'Ulica'
'os'
'os.'
'Os.'
'osiedle'

'oś'
'oś.'
'Oś.'
'ośedle'
'pl'
'pl.'
'Pl.'
'plac'
'al'
'al.'
'Al.'

'aleja'
'aleia'
'alei'
'aleii'
'aleji'

5.31.1.3. House and Apartment Number

'1/2'
'1 / 2'
'1/ 2'
'1 /2'
'3/5/7'
'1 m. 2'
'1 m 2'
'1 apt 2'
'1 apt. 2'
'180f/8f'
'180f/8'
'180/8f'
'13d bud. A'

5.31.1.4. Phone Numbers

+48 (12) 355 5678
+48 123 555 678
123 555 678

+48 12 355 5678
+48 123-555-678
+48 123 555 6789

+1 (123) 555-6789
+1 (123).555.6789

+1 800-python
+48123555678

+48 123 555 678 wew. 1337
+48 123555678,1
+48 123555678,1,2,3

5.31.2. Assignments

5.31.2.1. DataFrame Cleaning Translate

English
  1. Download data/astro-dates.csv

  2. Set header and index to data from file

  3. Convert Polish month names to English

  4. Parse dates to datetime objects

Polish
  1. Pobierz data/astro-dates.csv

  2. Ustaw nagłówek i index na dane zaczytane z pliku

  3. Przekonwertuj polskie nazwy miesięcy na angielskie

  4. Sparsuj daty do obiektów datetime

Hint
  • df['column'].replace(regex=True)

  • df['column'].apply()

  • pd.Timestamp

5.31.2.2. DataFrame Cleaning Substitute

English
  1. Download data/trl.xlsx

  2. Select Polish spreadsheet

  3. Set header and index to data from file

  4. Mind the encoding

  5. Substitute Polish Diacritics to English alphabet letters

  6. Compare df.replace(regex=True) with df.applymap()

Polish
  1. Pobierz data/trl.xlsx

  2. Wybierz arkusz Polish

  3. Ustaw nagłówek i index na dane zaczytane z pliku

  4. Zwróć uwagę na encoding

  5. Podmień polskie znaki diakrytyczne na litery z alfabetu angielskiego

  6. Porównaj df.replace(regex=True) z df.applymap()

Example
Listing 5.113. Polish -> English conversion table
ą: a
ć: c
ę: e
ł: l
ń: n
ó: o
ś: s
ż: z
ź: z
Hint
  • df.set_index()

  • df.applymap()

  • s.map()

5.31.2.3. DataFrame Cleaning Month number to text

English
  1. Use data from "Input" section (see below)

  2. Download data/phones.csv

  3. Add column year and month_name by parsing month column

  4. Month name must be a string month name, not a number (i.e.: 'January', 'May')

Polish
  1. Użyj danych z sekcji "Input" (patrz poniżej)

  2. Pobierz data/phones.csv

  3. Dodaj kolumnę year i month_name poprzez sparsowanie kolumny month

  4. Nazwa miesiąca musi być ciągiem znaków, a nie liczbą (i.e. 'January', 'May')

Example
  1. if month column is "2015-01"

  2. year: 2015

  3. month_name: January

Input
1, January
2, February
3, March
4, April
5, May
6, June
7, July
8, August
9, September
10, October
11, November
12, December
Hint
  • Series.str.split()

  • df[ ['A', 'b'] ]