pandas dataframe에서 특정 값을 가진 행을 제외하는 방법

개발하는 G0·2023년 7월 24일
0

Pandas DataFrame에서 특정 값을 가진 행을 제외하는 방법은 여러 가지가 있습니다. 일반적으로는 조건을 사용하여 해당 값을 가진 행을 필터링하고 제외하는 방법이 가장 흔히 사용되는 방법입니다.

예를 들어, 특정 값이 '제외하려는 값'과 일치하지 않는 행들만 선택하여 새로운 DataFrame을 만들 수 있습니다:

import pandas as pd

# 예시 DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 28],
        'City': ['New York', 'San Francisco', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)

# 'Name' 열에서 'Charlie'를 가진 행을 제외한 DataFrame 생성
result = df[df['Name'] != 'Charlie']
print(result)

위 코드에서 df['Name'] != 'Charlie' 조건은 'Name' 열의 값이 'Charlie'와 일치하지 않는 모든 행을 선택합니다.

만약 원본 DataFrame에서 특정 값을 가진 행을 제거하고 싶다면 drop() 메서드를 사용할 수도 있습니다:

import pandas as pd

# 예시 DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 28],
        'City': ['New York', 'San Francisco', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)

# 'Name' 열에서 'Charlie'를 가진 행을 제외한 DataFrame 생성
result = df.drop(df[df['Name'] == 'Charlie'].index)
print(result)

위 코드에서 df[df['Name'] == 'Charlie']는 'Name' 열에서 'Charlie'와 일치하는 행들을 선택하고, drop() 메서드를 이용하여 해당 인덱스를 제거하여 새로운 DataFrame을 반환합니다.

두 가지 방법 모두 해당 값을 가진 행을 제외한 DataFrame을 얻을 수 있습니다. 선택적으로, inplace=True 파라미터를 사용하여 원본 DataFrame을 변경할 수도 있습니다. 예를 들어, df.drop(df[df['Name'] == 'Charlie'].index, inplace=True)와 같이 사용할 수 있습니다. 하지만 이 경우에는 주의하여 사용하시기 바랍니다.







위에서 설명한 두 가지 방법 중 어느 방법을 사용하더라도 해당 값을 가진 행을 제외하고 새로운 DataFrame을 생성하게 되면 인덱스가 변경될 수 있습니다.

  1. 조건을 이용한 필터링 방법:
import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 28],
        'City': ['New York', 'San Francisco', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)

result = df[df['Name'] != 'Charlie']
print(result)

결과:

    Name  Age           City
0  Alice   25       New York
1    Bob   30  San Francisco
3  David   28    Los Angeles
  1. drop() 메서드를 사용한 방법:
import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 28],
        'City': ['New York', 'San Francisco', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)

result = df.drop(df[df['Name'] == 'Charlie'].index)
print(result)

결과:

    Name  Age           City
0  Alice   25       New York
1    Bob   30  San Francisco
3  David   28    Los Angeles

위의 두 가지 방법 모두 'Charlie'를 가진 행을 제외하고 새로운 DataFrame을 생성하였고, 이로 인해 기존 DataFrame과 다른 인덱스를 가지고 있습니다. 인덱스가 기존과 다른 이유는 해당 행이 제거되면서 DataFrame 내의 다른 행들의 인덱스가 재정렬되기 때문입니다.

만약 인덱스를 유지하고 싶다면, reset_index() 메서드를 사용하여 인덱스를 다시 초기화할 수 있습니다:

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 28],
        'City': ['New York', 'San Francisco', 'Chicago', 'Los Angeles']}
df = pd.DataFrame(data)

result = df[df['Name'] != 'Charlie'].reset_index(drop=True)
print(result)

결과:

    Name  Age           City
0  Alice   25       New York
1    Bob   30  San Francisco
2  David   28    Los Angeles

reset_index(drop=True)를 추가함으로써 인덱스가 다시 초기화되고, 기존 DataFrame과 같은 인덱스를 가지게 됩니다. drop=True 파라미터를 사용하면 기존 인덱스가 새로운 열로 추가되지 않고 완전히 제거됩니다.

profile
초보 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

글 잘 봤습니다.

답글 달기