loc 과 iloc 은 모두 특정원소를 선택하는데 사용하는 인덱서 다.
예시로 이해하면 편하니 타이타닉 데이터를 df로 두고 한번 보도록 하자.

loc은 행 인덱스번호와 열 이름을 사용해서 데이터를 선택한다.
df.loc[행 인덱스번호, 열 이름]
행은 모두 보여주고 열 이름이 PassengerId 인 데이터를 모두 확인하고 싶을 때

행 인덱스 번호가 0부터 3인것까지 와 열 인덱스이름이 PassengerId, Survived 인 데이터를 모두 확인하고 싶을 때

iloc은 행 인덱스와 열 인덱스를 사용해서 선택
df.iloc[행 인덱스번호, 열 인덱스번호]
나는 0번째 행 인덱스의 데이터를 모두 확인하고 싶다.

아니면 0번째부터 2번째 행 인덱스와 1번째부터 2번째 열 인덱스의 데이터를 확인하고 싶다.

왜 df.loc[0:3,['PassengerId','Survived']]는 행이 0, 1, 2, 3이 나오고 df.iloc[0:3,1:3]는 행이 0, 1, 2일때가 나오는거에요?
loc은
행 이름으로 추출하기 때문에 행 인덱스 이름인 0, 1, 2, 3 행이 추출된다.
df.loc에서 0, 1, 2, 3은 행 인덱스 이름이다.
반면에 iloc은인덱스 번호로 추출하는 것으로 인덱스 슬라이싱을 통해 0:3 이면 0, 1, 2번째 인덱스만 추출한다.