빅데이터 공부

DataFrame 다루기

왕초보코딩러 2023. 10. 26. 18:37
728x90

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

 

df[] 와 df.loc[]의 차이

 

www.codeit.kr

 

 

숫자를 사용하는 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

 

[파이썬] 7. 판다스 - 특정 조건 만족하는 행 삭제하기

1) 조건을 만족하는 행의 index 뽑기 ↓ 2) 해당 index의 행을 drop ex) 1) idx = DF[DF['...

blog.naver.com


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