판다스 (Pandas) (데이터 선택 및 필터링)

2024. 8. 2. 22:04프로그래밍 (확장)/Python-Pandas

1. 인덱싱과 슬라이싱

데이터 선택하기

import pandas as pd

# DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
        'Age': [25, 30, 35, 40, 45],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']}
df = pd.DataFrame(data)

# 단일 열 선택
print(df['Name'])

# 여러 열 선택
print(df[['Name', 'City']])

# 열 추가
df['Salary'] = [50000, 60000, 70000, 80000, 90000]
print(df)
0      Alice
1        Bob
2    Charlie
3      David
4     Edward
Name: Name, dtype: object

      Name         City
0    Alice     New York
1      Bob  Los Angeles
2  Charlie      Chicago
3    David      Houston
4   Edward      Phoenix

      Name  Age         City  Salary
0    Alice   25     New York   50000
1      Bob   30  Los Angeles   60000
2  Charlie   35      Chicago   70000
3    David   40      Houston   80000
4   Edward   45      Phoenix   90000

 

행 선택하기

# 단일 행 선택 (iloc 사용)
print(df.iloc[0])

# 여러 행 선택 (iloc 사용)
print(df.iloc[0:2])

# 조건을 사용하여 행 선택
print(df[df['Age'] > 30])
Name         Alice
Age             25
City      New York
Salary       50000
Name: 0, dtype: object

    Name  Age         City  Salary
0  Alice   25     New York   50000
1    Bob   30  Los Angeles   60000

      Name  Age     City  Salary
2  Charlie   35  Chicago   70000
3    David   40  Houston   80000
4   Edward   45  Phoenix   90000

 

행과 열 동시 선택하기

# 단일 요소 선택
print(df.at[0, 'Name'])

# 행과 열 슬라이싱 (loc 사용)
print(df.loc[0:1, ['Name', 'City']])
Alice

    Name         City
0  Alice     New York
1    Bob  Los Angeles

 

 

 

2. 조건을 통한 데이터 필터링

 

단일 조건을 사용한 필터링

import pandas as pd

# DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
        'Age': [25, 30, 35, 40, 45],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']}
df = pd.DataFrame(data)

# 나이가 30 이상인 행 선택
filtered_df = df[df['Age'] >= 30]
print(filtered_df)
      Name  Age         City  Salary
1      Bob   30  Los Angeles   60000
2  Charlie   35      Chicago   70000
3    David   40      Houston   80000
4   Edward   45      Phoenix   90000

 

여러 조건을 사용한 필터링

# 나이가 25 이상이고 도시에 'New'가 포함된 행 선택
filtered_df = df[(df['Age'] >= 25) & (df['City'].str.contains('New'))]
print(filtered_df)
    Name  Age      City  Salary
0  Alice   25  New York   50000

 

isin() 메서드를 사용한 필터링

# 'City' 열에서 'New York' 또는 'Chicago'인 행 선택
filtered_df = df[df['City'].isin(['New York', 'Chicago'])]
print(filtered_df)
      Name  Age      City  Salary
0    Alice   25  New York   50000
2  Charlie   35   Chicago   70000

 

str.contains()를 사용한 필터링

# 'City' 열에서 'o'가 포함된 행 선택
filtered_df = df[df['City'].str.contains('o')]
print(filtered_df)
      Name  Age         City  Salary
0    Alice   25     New York   50000
1      Bob   30  Los Angeles   60000
2  Charlie   35      Chicago   70000
3    David   40      Houston   80000
4   Edward   45      Phoenix   90000

 

between() 메서드를 사용한 필터링

# 나이가 30과 40 사이인 행 선택
filtered_df = df[df['Age'].between(30, 40)]
print(filtered_df)
      Name  Age         City  Salary
1      Bob   30  Los Angeles   60000
2  Charlie   35      Chicago   70000
3    David   40      Houston   80000

 

 

 

3. 데이터 정제

 

결측치 처리

 

결측치 확인하기

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

 

결측치 채우기

# 결측치를 특정 값으로 채우기
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

 

결측치 제거

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

 

 

 

중복 데이터 처리

 

중복 데이터 확인

import pandas as pd

# 중복 데이터가 있는 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

 

중복 데이터 제거

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

 

 

4. 데이터 변형

데이터 정렬

 

단일 열을 기준으로 정렬

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Alice'],
        'Age': [25, 30, 25],
        'City': ['New York', 'Los Angeles', 'New York']}
df = pd.DataFrame(data)

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

 

여러 열을 기준으로 정렬

# '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을 사용한 데이터 병합

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를 사용한 데이터 병합

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

 

출처: 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