Personally, I found working with data frames in Pandas pretty unfamiliar at first and the online cheat sheets not very easy to read. It was really helpful for me just to collect all the examples Jeremy had covered in one place and connect it together (adding some other small useful bits), so though I’d share my code for others to dig through:
Great job! BTW one very minor suggestion: you can always remove , : from any numpy or pandas indexing. E.g. instead of arr[0, :] just say arr[0] - the trailing colon is assumed. (Very few people seem to be aware of this, so most code I see on the internet has the trailing colon - but I think it’s clearer without it, personally).
I also wonder if it should be df_raw.iloc[range(5)] not df_raw.loc[range(5)]. We happen to have an index of 0, 1, 2, … for that dataset but iloc will always give you the more numpy indexing.