Czym różnią się iloc i loc?

Czy ktoś może wyjaśnić, czym różnią się te dwie metody krojenia?
Widziałem dokumenty i widziałem te odpowiedzi, ale nadal nie rozumiem, czym różnią się te trzy elementy. Wydaje mi się, że w dużej mierze są one zamienne, ponieważ znajdują się na niższych poziomach krojenia.

Powiedzmy na przykład, że chcemy uzyskać pierwsze pięć wierszy DataFrame. Jak to jest, że te dwie rzeczy działają?

df.loc[:5] df.iloc[:5] 

Czy ktoś może przedstawić trzy przypadki, w których różnice w zastosowaniach są wyraźniejsze?


Pewnego razu chciałem również wiedzieć, czym te dwie funkcje różnią się od df.ix[:5], ale ix został usunięty z pand 1.0, więc mnie to już nie obchodzi.