320x100
# 첫번째 열에 대한 3개의 정보를 가져오고 싶다면
summer.iloc[0, :3]
# Year 1896
# City Athens
# Sport Aquatics
# Name: HAJOS, Alfred, dtype: object
import pandas as pd
titanic = pd.read_csv('./titanic.csv')
titanic
# 화면에 보여줄 수 있는 pandas의 각 실행별로 최대 rows 값
pd.options.display.max_rows
# 화면에 보여줄 수 있는 pandas의 각 실행별로 최저 rows 값
pd.options.display.min_rows #10
# pd.options.display.min_rows = 20
# 이라고 해주면, pandas를 출력할때마다 20개 이상의 행을 가지고 있는 값에 대해서는 20개까지 화면에 표시해준다.
# 보통 설정숫자가 짝수일 경우, 반반을 나누어서 처음 절반수, 마지막 절반수를 출력해준다.
# min_rows가 10일경우 0,1,2,3,4 ... -5,-4,-3,-2,-1
# 이런식으로
# 열에대한 기본적인 계산식 리턴
titanic.describe()
# 모든 열에 대해 데이터 자료형이 객체인 열을 선택한다.
# 이것들은 일반적으로 텍스트 데이터로 된 숫자가 아닌 열이다.
titanic.describe(include= 'O')
# sex embarked deck
# count 891 889 203
# unique 2 3 7
# top male S C
# freq 577 644 59
# titanic에 포함된 모든 수에 대해서 , 뒤의 숫자만큼 소수점 자리를 표기해줘라.
# 즉 1이면 22.0 혹은 22.7, 2면 22.83 혹은 22.13 등등
round(titanic, 1)
# 열을 기준으로 최소한의 문자, 숫자라고 해서 age라고는 하지만 실질적으로는 "컬럼명"중에서 가 맞는것같다.
min(titanic)
# 각 컬럼의 최소값을 출력
titanic.min()
# 각 컬럼의 평균값
titanic.mean()
# 열을 선택할때
# 이와같이 데이터프레임화 되어있는것['컬럼값']
titanic['age']
# titanic.age 라고 해도 동일한 작동이 된다.
# 하지만 이렇게 출력되는 값은 pandas의 siries 라이브러리 라고 한다.
# pandas의 siries 라이브러리인지 확인하는 과정
type(titanic['age'])
# pandas.core.series.Series
# 이렇게 해주면 ('age', 'sex')로 묶여있는 튜플형 컬럼이 없기 때문에
# key error가 뜬다.
titanic['age', 'sex']
# 재밌는 것은 이것을 리스트 안의 리스트로 묶게되면 형식상
# 리스트가 []한개만 있을때는 df.컬럼 과 같은 기능으로 작동하는데
# 리스트가 [[]]이렇게 이중일 때는 df.[컬럼] 과 같은 효과로 작용한다.
# 따라서 2개 이상의 컬럼을 선택하고 싶을때는
titanic[['age', 'sex']]
# 이 경우에는 dataframe 이 된다.
type(titanic[['age', 'sex']])
# pandas.core.frame.DataFrame
# 이렇게 해주면 keyerror가 생기게 되고
type(titanic['age', 'sex'])
# KeyError: ('age', 'sex')
# 이렇게 해주면 siries가 된다.
type(titanic['age'])
# pandas.core.series.Series
# 하지만 대부분의 경우에 Series와 dataframe은 메소드를 공유한다.
# 특별히 그들만의 것인 메소드는 거의 없다.
titanic.age.equals(titanic['age'])
# titanic.age와 ()안의 것이 같은지 확인하는 것이다.
# index_col의 안에는 인덱스의 기준이 되고자 하는 컬럼의 이름을 넣는다.
# 여기서는 Athlete 를 인덱스의 기준으로 해주었기 때문에, 오른쪽으로는 컬럼 인덱스, 아래로는 행 인덱스가 펼쳐지며,
# 순서는 Year이 컬럼 인덱스넘버 0, HAJOS, Alfred가 행 인덱스넘버 0이다.
summer = pd.read_csv('summer.csv', index_col= 'Athlete')
summer.iloc[0]
# Year 1896
# City Athens
# Sport Aquatics
# Discipline Swimming
# Country HUN
# Gender Men
# Event 100M Freestyle
# Medal Gold
# Name: HAJOS, Alfred, dtype: object
# 위와 같이 행 인덱스 0번에 대한 정보가 다 나온다.
type(summer.iloc[0])
# pandas.core.series.Series
# 이것도 행 인덱스의 가장 마지막 인덱스 정보를 가져온 거라고 볼 수 있다.
summer.iloc[-1]
# 즉, iloc은 기본적으로 행 인덱스의 정보를 가져오는 거라고 생각하면 되겠다.
# 이것도 이전에 ['age']처럼 컬럼을 한개를 선택해주는 것이 아니라, 2개 이상의 다중 컬럼 선택시 이중 리스트를 이용해주면 되겠다.
summer.iloc[[1,2,3]]
# 행의 인덱스 0, 열의 인덱스 4
summer.iloc[0, 4]
# 행의 인덱스 0의 자리의 것이 선택이 되면 거기서
# 오른쪽으로 열의 인덱스를 0 부터 세기 시작한다. 그것에 대한 값이다.
# 첫번째 열에 대한 일부분의 값을 가지고 오고싶다.
# 이를테면
# summer.columns
# Index(['Year', 'City', 'Sport', 'Discipline', 'Country', 'Gender', 'Event', 'Medal'],
# dtype='object')
# 인 상황에서 Year, Sport, Discipline, Medal의 정보를 가지고 오고싶다고 하면
summer.iloc[0,[0,2,3,-1]]
# 이렇게 쓸 수 있다.
# 이렇게하면
# IndexError: .iloc requires numeric indexers, got ['City' 'Sport']
# 이런 에러가 뜬다. 열 인덱스에 한개의 값을 넣어도 결과는 마찬가지다.
# 왜냐하면 error메세지에 보면 iloc은 numeric 즉, 숫자로된 인덱스 값을 넣어야 하기 때문이다.
summer.iloc[34:39, ['City', 'Sport']]
# 이것부턴 iloc과는 사용법이 달라진다.
# 직접적으로 열의 위치를 모를 경우에, 열의 이름값을 적어주면 반환된다.
summer.loc['DRIVAS, Dimitrios']
# loc은 왼쪽은 행에 대한 레이블을 정의하고 오른쪽은 열에대한 레이블을 정의한다.
# 그리고 iloc과는 다르게, numeric이 안먹는다.
# 따라서 iloc은 integer location 같고, loc은 그냥 location 의 의미같다.
# 나중에 확인해보니, loc의 왼쪽에 행값을 넣어야하는데, 여기서 사용중인 행값은 숫자가 아닌 문자로 되어있기 때문에 문자로 작동하는거다.
# 즉, loc이라고 할지라도 행이 숫자라면 숫자로 작성해줘야하고 열이 숫자라면 이또한 숫자로 작성해줘야한다.
# 음.. 이런측면에서 보자면 iloc이 자유도가 더 높아서 실용적인것 같다.
# 마이클 펠프스의 메달기록만을 보고싶다면
summer.loc['PHELPS, Michael', 'Medal']
# 2명 이상의 정보를 뽑고 싶을때는, 이전에 배웠던 것과 같다.
# 이중 리스트를 먹여주는 거다.
summer.loc[['PHELPS, Michael', 'LIDBERG, Jimmy'], ['Medal', 'Event']]
# 이렇게 실행하면
summer.loc[:'PHELPS, Michael']
# KeyError: "Cannot get right slice bound for non-unique label: 'PHELPS, Michael'"
# 이런 에러가 뜬다. 즉, PHELPS, Michael라는 값이 unique하지 못하기 때문에, 어디까지 슬라이싱을 해줘야할지 모르겠다. 뭐 그런뜻이다.
# 두 개 이상의 행에 등장하는 값은 이런 문제가 발생한다.
# 이쯤에서 생각난 것이 있다.
# 아까는 기준점으로 잡아줬던게 뭐였고, 어떻게 기준을 잡았었지?
# summer = pd.read_csv('summer.csv', index_col= 'Athlete')
# 이렇게 index_col 값으로 넣어주었기 때문에 기준값이 다를 수가 있었다.
summer.loc[[0,5,30000], ['Athlete', 'Medal']]
# 없는것을 재설정해주는 거라고는 하는데, 솔직히 왜 필요한지는 잘 모르겠다.
# 에러가 안나고 실행은 되는정도? 실행은되지만, 기존에 없던 값들에 대해서는 NaN값으로 출력이 된다는 점?
summer.reindex(index= [0,5,30000,40000], columns=['Athlete', 'Medal', 'Age'])
# reindex는 전체적으로 잘 이해가 안가는 부분이 있다.
# reindex도 포인트가 다를 뿐이지 에러는 난다. 듀플리케이트 에러;
# 음.. 잘 모르겠다.
300x250
'개발일지 > Pandas' 카테고리의 다른 글
pandas (판다스) 기초3 (0) | 2022.07.15 |
---|---|
pandas(판다스) 기초 2 (0) | 2022.07.14 |
pymssql 설치에러 해결! (0) | 2022.07.08 |
pandas excel 가져오기 루틴 (0) | 2022.07.08 |
pandas로 데이터 가져오기 루틴 1 (csv파일 읽기) (0) | 2022.07.08 |