Pandas 사용하기
데이터프레임의 이름은 df로 하겠습니다!!.
1. 데이터 값 추출하기
-인덱싱
#인덱싱
#특정 값 하나를 보고 싶을 때
df.loc['특정 인덱스 값', '특정 컬럼 값']
#특정 인덱스의 모든 값을 보고 싶을 때
df.loc['특정 인덱스 값', :]
df.loc['특정 인덱스 값']
#특정 컬럼의 모든 값을 보고 싶을 때
df.loc[: , '특정 컬럼 값']
df['특정 컬럼 값']
컬럼만 인덱싱할 때는 .loc이 필요 없다
만약 원하는 인덱스나 컬럼이 2개 이상이라면
리스트로 묶어주면 됩니다
#인덱싱
#여러 값을 보고 싶을 때
df.loc[[인덱스1, 인덱스2], [컬럼1, 컬럼2]]
#특정 인덱스들의 모든 컬럼
df.loc[[인덱스1, 인덱스2], :]
df.loc[[인덱스1, 인덱스2]]
#특정 컬럼들의 모든 인덱스
df.loc[: , [컬럼1, 컬럼2]]
df[[컬럼1, 컬럼2]]
-슬라이싱
원하는 값이 연속되게 있을 때 슬라이싱 사용
리스트 없이 :(콜론)을 이용한다
#슬라이싱
#인덱스 슬라이싱(컬럼은 모두 다 추출 됨)
df.loc['여기 인덱스' : '저기 인덱스']
df['여기 인덱스' : '저기 인덱스']
#컬럼 슬라이싱(인덱스는 모두 다 추출 됨)
df.loc[:, '여기 컬럼' : '저기 컬럼']
#인덱스, 컬럼 슬라이싱
df.loc['여기 인덱스' : '저기 인덱스', '여기 컬럼' : '저기 컬럼']
컬럼 슬라이싱은 .loc이 꼭 필요하다!!
.loc를 사용하지 않아도 되는 경우?
인덱싱에서는 df.loc[] 없이 df[]를 사용하면 컬럼 추출이고
슬라이싱에서는 df.loc[] 없이 df[]를 사용하면 인덱스 슬라이싱이다.
컬럼 추출, 인덱싱 슬라이스가 많기 때문
https://www.codeit.kr/community/questions/UXVlc3Rpb246NWUzNDUyMjU4MGU1MTMzNzNkOTYyN2M0
숫자를 사용하는 iloc
iloc로도 동일하게 인덱싱, 슬라이싱이 가능하다.
데이터프레임 인덱싱은 불린 형태의 리스트도 가능하다
True인 것만 뽑아준다
df.loc[[True, False, True, Ture]] #0번, 2번, 3번 인덱스만 추출
df.loc[:, [False, True, True, False]] #1번, 2번 컬럼만 추출
리스트 길이는 인덱스와 컬럼 길이와 동일하게 작성!
불린 리스트 형태를 사용하면 조건을 충족시키는 값을 뽑을 수 있다!!
조건 만들기
#예시
df['컬럼명'] > 10
df['컬럼명'] == 'No'
조건이 만들어지면 모든 인덱스에 대한 T/F 값이 나온다
불린 타입의 시리즈 형태로 나와야 조건에 넣을 수 있다!!
데이터프레임 형태로는 조건을 만들지 못함..
<조건으로 가능할 때>
#가능
df['B'] < 80 #True, False 형태
type(df['B'] < 80) #pandas.core.series.Series
#컬럼 'B'에서 80 이하인 행만 추출
df.loc[df['B'] < 80]
<조건으로 불가능할 때>
#불가능
df[['B','E']] < 80 #True, False 형태
type(df[['B','E']] < 80) #pandas.core.frame.DataFrame
#error
df.loc[df[['B','E']] < 80]
조건으로 인덱싱
df[조건]
df.loc[조건]
조건이 여러 개라면, 조건을 ()괄호로 묶는다
#조건이 많을 때: ()로 묶는다
#방법 1
df[(조건1) & (조건2)]
df.loc[(조건1) | (조건2)]
#방법 2 변수에 저장
qustn = (조건1) & (조건2)
df[qustn]
2. 데이터 값 변경하기
- 값 하나 변경하기
df.loc['특정 인덱스 값', '특정 컬럼 값'] = 변경할 값
- row 한 줄 변경하기
df.loc['특정 인덱스 값'] = [바꿀 값 리스트 형태로]
- column 한 줄 변경하기
df['특정 컬럼 값'] = [바꿀 값 리스트 형태로]
똑같은 값을 넣을 거라면 리스트 없이 하나의 값만 써주면 된다.
[바꿀 값 리스트 형태로] ==> 값 하나
#컬럼 값을 모두 0으로
df['컬럼명'] = 0
3. 데이터 값 추가하기
추가는 새로운 컬럼과 인덱스를 사용할 뿐 값 수정과 똑같다.
- row 한 줄 추가하기
df.loc['추가할 인덱스 값'] = [넣을 값 리스트 형태로]
- column 한 줄 추가하기
df['추가할 컬럼 값'] = [넣을 값 리스트 형태로]
4. 데이터 값 삭제하기
df.drop()
<파라미터>
삭제할 값
axis : index인지 column인지('index' or 'columns')
inplace : 삭제 정보를 지금 데이터 프레임에 저장할 것인지(True, False)
- 삭제할 것이 한 줄일 때
df.drop('삭제할 인덱스 값', axis = 'index', inplace = Fasle)
df.drop('삭제할 컬럼 값', axis = 'columns', inplace = Fasle)
- 삭제할 것이 여러 줄일 때
df.drop(['삭제할 인덱스 값1', '삭제할 인덱스 값2'], axis = 'index', inplace = Fasle)
df.drop(['삭제할 컬럼 값1', '삭제할 컬럼 값2'], axis = 'columns', inplace = Fasle)
- 조건을 이용한 삭제
idx = df[df['컬럼명'] == '조건'].index
df.drop(idx, axis=0)
- drop() 없이 조건을 이용한 삭제
df = df[df['컬럼명'] != '조건']
https://blog.naver.com/nilsine11202/221667433984
5. index와 column 설정
- index
index의 이름들을 리스트로 가져오고 싶다
df.index
- columns
column의 이름들을 리스트로 가져오고 싶다
df.columns
- index.name
index 대표 이름을 지정해주고 싶다
df.index.name = '인덱스 이름'
- set_index()
데이터프레임의 다른 컬럼을 인덱스로 사용하고 싶다(index의 이름을 바꾸고 싶다)
#기존 데이터프레임에서 변경 후 저장
df.set_index=('바꿀 컬럼명', inplace = True)
#새로운 데이터프레임에 저장
new_df = df.set_index=('바꿀 컬럼명', inplace = False)
바꿀 컬럼명의 값들은 컬럼에서 사라진다
inplace = True 시, 인덱스가 바뀌기 때문에
그렇기 때문에 인덱스의 값을 살리고 싶다면, 기존 인덱스 이름을 다른 열에 추가해야 한다.
#기존 인덱스 새로운 컬럼에 저장
df['새로운 컬럼명'] = df.index
- rename()
column의 이름을 바꾸고 싶다
#기존 데이터프레임에서 변경 후 저장
df.rename(columns = {'기존 컬럼명' : '바꿀 컬럼명'}, inplace = True)
#새로운 데이터프레임에 저장
new_df = df.rename(columns = {'기존 컬럼명' : '바꿀 컬럼명'}, inplace = False)
'기존 컬럼명' : '바꿀 컬럼명'
형태의 딕셔너리 형태로 만든다
여러 개를 넣을 수 있다
인덱스명을 바꾸는 set_index와 컬럼명을 바꾸는 rename은 inplace = False 가 디폴트이다
6.데이터프레임 점검
데이터 프레임의 크기가 클 때 데이터들을 파악하기 쉽도록 점검한다
- 몇 개의 데이터만 추출해서 보기
#맨 위의 몇 개
df.head(숫자)
#맨 아래의 몇 개
df.tail(숫자)
#랜덤 몇 개
df.sample(숫자)
- 데이터 프레임의 모양 출력
df.shape
- 데이터 프레임 정보 보기(non-null 등)
df.info()
- 데이터 프레임 통계 보기
df.describe()
- 데이터 프레임 정렬 하기
df.sort_values()
<파라미터>
by : 기준 컬럼명
ascending : 오름차순, 내림차순(True, False) -> 오름차순(True)가 디폴트
inplace : 정렬 정보를 지금 데이터 프레임에 저장할 것인지(True, False)
#컬럼명 기준 오름차순 정렬(ascending = True 안 써도 됨)
df.sort_values(by='컬럼명', ascending = True, inplace = True)
#컬럼명 기준 내림차순 정렬
df.sort_values(by='컬럼명', ascending = False, inplace = True)
7. 시리즈 / 데이터 프레임의 컬럼 점검
- 중복 된 거 제외한 값 보기
df['컬럼명'].unique()
넘파이 배열로 컬럼명 보여준다
- 몇 개 중복되었는지 보기
df['컬럼명'].value_counts()
컬럼명 중복 수
컬럼명 중복 수
...
시리즈 형태로 출력된다
- 중복 제외 유니크한 컬럼 개수 보기
df['컬럼명'].value_counts().shape
value_counts()로 나온 시리즈 값의 형태를 보여준다
- 시리즈 / 데이터 프레임 컬럼의 정보 보기
df['컬럼명'].describe()
나오는 정보
count : 요소 수
unique : 중복되지 않는 값의 수
top : 중복 수가 제일 많은 컬럼명
freq : 중복이 많은 컬럼명의 중복 수
8. 데이터 처리
new_list = [] #리스트 타입
df['컬럼명'].isin(new_list)
df의 컬럼명의 요소들이 리스트 안에 있으면 True를 반환, 없으면 False를 시리즈 형태로 반환
for문 없이 사용 가능하다
'빅데이터 공부' 카테고리의 다른 글
데이터 클리닝 (0) | 2023.11.29 |
---|---|
판다스 기본 제공 메소드로 시각화하기 (2) | 2023.11.23 |
Pandas DataFrame의 데이터 전처리 (0) | 2023.07.12 |
판다스(Pandas) (0) | 2023.06.17 |
넘파이(Numpy) (0) | 2023.06.03 |