판다스 (Pandas) (데이터 정제)

2024. 8. 3. 13:24프로그래밍 (확장)/Python-Pandas

1. 결측치 처리

결측치 확인

 

예시 (ChatGPT 생성):

import pandas as pd

# 결측치가 있는 DataFrame 생성
data = {'Name': ['Alice', 'Bob', None],
        'Age': [25, None, 35],
        'City': ['New York', 'Los Angeles', None]}
df = pd.DataFrame(data)

# 결측치 확인
print(df.isnull())
print(df.isnull().sum())
    Name    Age   City
0  False  False  False
1  False   True  False
2   True  False   True

Name    1
Age     1
City    1
dtype: int64

 

 

결측치 채우기

 

예시 (ChatGPT 생성):

 - 지정하는 값으로 채우기

# 결측치를 특정 값으로 채우기
df_filled = df.fillna({'Name': 'Unknown', 'Age': 0, 'City': 'Unknown'})
print(df_filled)
      Name   Age         City
0    Alice  25.0     New York
1      Bob   0.0  Los Angeles
2  Unknown  35.0      Unknown

data = {'Name': ['Alice', 'Bob', None],

            'Age': [25, None, 35],

            'City': ['New York', 'Los Angeles', None]}

에서 None인 위치가 Name은 Unknown으로 Age는 0으로 City는 Unknown으로 채워저 있는 것을 확인 할 수 있다.

 

 - 평균이나 중간값으로 채우는 것도 가능.

# 'Age' 열의 결측치를 평균 값으로 채우기
df['Age'] = df['Age'].fillna(df['Age'].mean())
print(df)
    Name   Age         City
0  Alice  25.0     New York
1    Bob  30.0  Los Angeles
2   None  35.0         None

 

 

결측치 제거

결측치가 있는 행이나 열을 제거

 

예시 (ChatGPT 생성):

# 결측치가 있는 행 제거
df_dropped = df.dropna()
print(df_dropped)
    Name   Age         City
0  Alice  25.0     New York
1    Bob  30.0  Los Angeles

 

# 결측치가 있는 열 제거
df_dropped_columns = df.dropna(axis=1)
print(df_dropped_columns)

# 결측치가 특정 개수 이상인 행 제거
df_dropped_thresh = df.dropna(thresh=2)
print(df_dropped_thresh)
    Age
0  25.0
1  30.0
2  35.0
    Name   Age         City
0  Alice  25.0     New York
1    Bob  30.0  Los Angeles

 


 

2. 중복 데이터 처리

중복된 데이터는 분석 결과에 영향을 줄 수 있으므로, 중복 데이터를 확인하고 제거해야 함.

 

중복 데이터 확인

예시 (ChatGPT 생성):

# 중복 데이터가 있는 DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Alice'],
        'Age': [25, 30, 25],
        'City': ['New York', 'Los Angeles', 'New York']}
df = pd.DataFrame(data)

# 중복 데이터 확인
print(df.duplicated())
0    False
1    False
2     True
dtype: bool

 

중복 데이터 제거

예시 (ChatGPT 생성):

# 중복 데이터 제거
df_deduplicated = df.drop_duplicates()
print(df_deduplicated)
    Name  Age         City
0  Alice   25     New York
1    Bob   30  Los Angeles

 

중복 기준 열 지정하여 제거

예시 (ChatGPT 생성):

# 'Name' 열을 기준으로 중복 데이터 제거
df_deduplicated = df.drop_duplicates(subset=['Name'])
print(df_deduplicated)
    Name  Age         City
0  Alice   25     New York
1    Bob   30  Los Angeles

 


3. 데이터 변형

데이터 정렬

데이터를 특정 열을 기준으로 정렬할 수 있다.

 

단일 열을 기준으로 정렬

예시 (ChatGPT 생성):

# 'Age' 열을 기준으로 오름차순 정렬
sorted_df = df.sort_values(by='Age')
print(sorted_df)
    Name  Age         City
0  Alice   25     New York
2  Alice   25     New York
1    Bob   30  Los Angeles

 

여러 열을 기준으로 정렬

예시 (ChatGPT 생성):

# 'Age'와 'Name' 열을 기준으로 정렬
sorted_df = df.sort_values(by=['Age', 'Name'])
print(sorted_df)
    Name  Age         City
0  Alice   25     New York
2  Alice   25     New York
1    Bob   30  Los Angeles

 

데이터 프레임 병합

여러 데이터 프레임을 병합

 

concat을 사용한 데이터 병합 예시 (ChatGPT 생성):

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']})

df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],
                    'B': ['B3', 'B4', 'B5']})

# 행 단위로 병합
result = pd.concat([df1, df2], axis=0)
print(result)
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
0  A3  B3
1  A4  B4
2  A5  B5

 

merge를 사용한 데이터 병합 예시 (ChatGPT 생성):

df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
                    'A': ['A0', 'A1', 'A2']})

df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
                    'B': ['B0', 'B1', 'B2']})

# 공통 열을 기준으로 병합
result = pd.merge(df1, df2, on='key')
print(result)
  key   A   B
0  K0  A0  B0
1  K1  A1  B1
2  K2  A2  B2

 

join을 사용한 데이터 병합 예시 (ChatGPT 생성):

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']},
                   index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2']},
                   index=['K0', 'K2', 'K3'])

# 인덱스를 기준으로 병합
result = df1.join(df2)
print(result)
     A   B    C    D
K0  A0  B0   C0   D0
K1  A1  B1  NaN  NaN
K2  A2  B2   C1   D1

 

데이터 변형

데이터를 피벗하거나 멜트하여 변형

 

pivot(https://gangdonggil.tistory.com/52)을 사용한 데이터 변형 예시 (ChatGPT 생성):

data = {'Date': ['2020-01-01', '2020-01-02', '2020-01-03'],
        'City': ['New York', 'Los Angeles', 'Chicago'],
        'Temperature': [30, 22, 15]}

df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot_df = df.pivot(index='Date', columns='City', values='Temperature')
print(pivot_df)
City        Chicago  Los Angeles  New York
Date                                      
2020-01-01      NaN          NaN      30.0
2020-01-02      NaN         22.0       NaN
2020-01-03     15.0          NaN       NaN

 

melt를 사용한 데이터 변형 예시 (ChatGPT 생성):

data = {'Date': ['2020-01-01', '2020-01-02', '2020-01-03'],
        'New York': [30, 22, 15],
        'Los Angeles': [25, 20, 18]}

df = pd.DataFrame(data)

# 멜트 테이블 생성
melt_df = pd.melt(df, id_vars=['Date'], var_name='City', value_name='Temperature')
print(melt_df)
         Date         City  Temperature
0  2020-01-01     New York           30
1  2020-01-02     New York           22
2  2020-01-03     New York           15
3  2020-01-01  Los Angeles           25
4  2020-01-02  Los Angeles           20
5  2020-01-03  Los Angeles           18

 


 

출처:

https://pandas.pydata.org/docs/

 

pandas documentation — pandas 2.2.2 documentation

API reference The reference guide contains a detailed description of the pandas API. The reference describes how the methods work and which parameters can be used. It assumes that you have an understanding of the key concepts.

pandas.pydata.org