프로그래밍/파이썬

EDA - 1단계 : 데이터 다루기 - 확인

매 석 2023. 7. 16. 19:53
반응형

- 과거내용

 

EDA - 1단계 : 데이터 다루기 - 정보

과거내용 DataFrame - 정보 1. 인덱스 정보 인덱스의 이름과 타입을 index 함수를 통해 얻을 수 있다. 2....

blog.naver.com

 

- DataFrame - 데이터타입

 

1. 타입 변경

#원본 데이터
      col1   col2  col3
row1     1    one   1.1
row2     2    two   2.2
row3     3  three   3.3

#타입 변경
df=df.astype({'col1':'float64'})
print(df.dtypes)

col1    float64
col2     object
col3    float64
dtype: object

 

astype을 사용해서 특정 열의 타입을 바꾸었다.

dtype=타입 을 옵션으로 입력하면 전체 데이터의 타입을 바꿀 수 있다.

2. 열의 타입 통일

#원본 데이터
      col1   col2  col3
row1     1    one   1.1
row2     2    two   2.2
row3  <NA>  three  <NA>

#열의 타입 
df=df.convert_dtypes()
print(df.dtypes)

col1      Int64
col2     string
col3    Float64
dtype: object

 

 

convert_dtypes를 사용하면 열의 dtype을 가장 적절하게 통일시켜준다.

사용하기 전에는 <NA>가 있어 object 였지만 사용 후에는 Inty64 형태로 통일됐다.

3. 열의 dtype 추론

#원본 데이터
     col1
row1    1
row2    2
row3    A

col1    object
dtype: object

#열의 타입 추론
df=df.iloc[:2]
print(df.infer_objects().dtypes)

col1    int64
dtype: object

 

iloc을 이용해 데이터를 나눠주고 이후 infer_objects를 사용해서

열의 dtype을 추론할 수 있다.

 

- DataFrame - 확인

1. 최대/최소값

#원본 데이터
      col1  col2  col3
row1     1     2   100
row2   200     5     4
row3     6   300     2

#최대값 
print(df.idxmax(axis=0))

col1    row2
col2    row3
col3    row1
dtype: object

 

idxmax는 최대, idxmin은 최소를 의미한다. 옵션으로 axis를 사용해

행과 열 중 선택할 수 있다. 추가로 skipna를 사용해 결측값이 포함된 행/열을 무시할 수 있다.

2. 공백 여부 확인

#원본 데이터
col =  ['col1','col2','col3']
df = pd.DataFrame( index=idx)

#공백 여부 확인
print(df.empty)

True

 

empty를 사용해 True이면 공백, False이면 공백이 아니다.

NaN값도 공백이 아니기에 완전한 공백만 True가 나온다.

3. 일치하는 요소

#원본 데이터
      col1  col2  col3
row1     1     2     3
row2     1     5     6
row3     2     3     4

#일치하는 요소 확인
print(df.isin([1,2]))

      col1   col2   col3
row1  True   True  False
row2  True  False  False
row3  True  False  False

 

isin을 사용해서 입력한 값과 같은 경우 True, 아닌 경우 False를 반환하여

일치하는 요소를 쉽게 찾을 수 있다.

4. True/False 확인

#원본 데이터
      col1   col2   col3
row1  True   True  False
row2  True  False  False
row3  True  False  False

#all
print(df.all())

col1     True
col2    False
col3    False
dtype: bool

#any
print(df.any())

col1     True
col2     True
col3    False
dtype: bool

 

위에서 all의 경우는 모든 행의 값이 True일 때 트루를 반환하고,

any는 하나의 값만 True이면 True를 반환한다.

추가로 bool_only 옵션은 bool 형식인 경우만 계산하고,

skipna는 결측치를 제외하고 계산할 수 있다.

5. 결측값 아닌 값의 수

#원본 데이터
      col1  col2  col3
row1     1     2   NaN
row2     1     5   NaN
row3     2     3   4.0

#결측값 아닌 값의 수
print(df.count())

col1    3
col2    3
col3    1
dtype: int64

 

count를 사용해서 결측값이 아닌 요소의 개수를 얻을 수 있다.

옵션으로 axis, numeric_only 등을 사용할 수 있다.

6. 일치

#원본 데이터
df1 = pd.DataFrame(data=[[1,n],[3,2]])
df2 = pd.DataFrame(data=[[1,n],[3,2]])

#일치 여부
print(df1.equals(df2))

True

 

equals를 사용해서 두 데이터프레임이 같은지 확인할 수 있다.

True이면 같고, False이면 다른 것이다.

7. bool값 확인

#원본 데이터
      col
row  True

#불 값 확인
print(df1.bool())
True

 

​bool을 이용해서 객체의 값이 True인지 False인지 확인할 수 있다.

 

8. 중복행 확인

#원본 데이터
      col1  col2  col3
row1     1     2    10
row2     1     5    12
row3     1     2     4

#중복행 확인
print(df.duplicated(subset=['col1','col2']))

row1    False
row2    False
row3     True

 

duplicated의 옵션 중 subset을 사용해서 중복행을 확인한 것이다.

row3의 경우 row1과 값이 1,2로 같기 때문에 True가 나왔다.

나머지는 같지 않기에 False가 결과로 나온다.

이외에도 옵션 keep을 사용해 중복행을 확인할 수 있다.