Pandas DataFrame에서 열 값 바꾸기

Mohamed Ayman 2023년10월10일
  1. map()메서드를 사용하여 Pandas에서 열 값 바꾸기
  2. loc 메서드를 사용하여 Pandas에서 열 값 바꾸기
  3. Pandas DataFrame에서 열 값을 조건으로 바꾸기
  4. replace()메서드를 사용하여 값 수정
Pandas DataFrame에서 열 값 바꾸기

이 튜토리얼에서는 Pandas DataFrame에서 열 값을 바꾸는 방법을 소개합니다. 열 값을 쉽게 대체 할 수있는 세 가지 다른 함수를 다룰 것입니다.

map()메서드를 사용하여 Pandas에서 열 값 바꾸기

DataFrame의 열은 Pandas Series입니다. map 메소드를 사용하여 열의 각 값을 다른 값으로 바꿀 수 있습니다.

Series.map()구문

Series.map(arg, na_action=None)
  • 매개 변수 :
  1. arg :이 매개 변수는Series를 매핑하는 데 사용됩니다. 컬렉션이나 함수가 될 수 있습니다.
  2. na_action :NaN (Not a Number) 값을 처리하는 데 사용됩니다. None또는 ignore의 두 가지 값을 사용할 수 있습니다. 기본값은None이고map()Nan 값을 포함한 모든 값에 매핑을 적용합니다. ignoreNaN 값을 매핑 메소드로 전달하지 않고 열에있는 그대로 둡니다.

동일한 인덱스를 가진Series를 반환합니다.

이제map 메소드를 구현하는 예를 들어 보겠습니다. 아래 예제에서 동일한DataFrame을 사용합니다.

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

print(df)

출력:

      name    city
0  michael  berlin
1    louis   paris
2     jack    roma
3  jasmine     NaN

Pandas DataFrame에서 열 값을 컬렉션으로 바꾸기

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values with collection

df["city"] = df["city"].map(
    {"berlin": "dubai", "paris": "moscow", "roma": "milan", np.nan: "NY"},
    na_action=None,
)

print(df)

출력:

      name    city
0  michael   dubai
1    louis  moscow
2     jack   milan
3  jasmine      NY

원래 DataFrame city 열 값은map()메서드의 첫 번째 매개 변수 인 사전의 새 값으로 대체됩니다.

Pandas DataFrame의 함수로 열 값 바꾸기

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values with function

df["city"] = df["city"].map("I am from {}".format)

print(df)

출력:

      name              city
0  michael  I am from berlin
1    louis   I am from paris
2     jack    I am from roma
3  jasmine     I am from nan

na_action은 기본적으로None이므로 원래 열의NaN도 새 문자열I am from nan으로 대체됩니다.

NaN을 유지하고 싶지만 교체하지 않으려면na_actionignore로 설정할 수 있습니다.

import pandas as pd
import numpy as np

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "city": ["berlin", "paris", "roma", np.nan],
}
df = pd.DataFrame(data, columns=["name", "city"])

# replace column values excluding NaN

df["city"] = df["city"].map("I am from {}".format, na_action="ignore")

print(df)

출력:

      name              city
0  michael  I am from berlin
1    louis   I am from paris
2     jack    I am from roma
3  jasmine               NaN

loc 메서드를 사용하여 Pandas에서 열 값 바꾸기

Pandas DataFrame 열의 값을 대체하는 또 다른 방법은DataFrameloc()메서드입니다. loc()메소드는 레이블을 통해 값에 액세스합니다.

DataFrame.loc[]구문

pandas.DataFrame.loc[condition, column_label] = new_value
  • 매개 변수 :
  1. condition: 이 매개 변수는 조건을 참으로 만드는 값을 반환합니다.
  2. column_label: 업데이트 할 대상 열을 지정하는 데 사용되는이 매개 변수

매개 변수를 통해 값을 결정한 후 new_value로 업데이트합니다.

이제loc 메소드를 구현하는 예제를 살펴 보겠습니다. 아래의DataFrame을 예로 사용하겠습니다.

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "grades": [30, 70, 40, 80],
    "result": ["N/A", "N/A", "N/A", "N/A"],
}

df = pd.DataFrame(data, columns=["name", "grades", "result"])

print(df)

출력:

      name  grades result
0  michael      30    N/A
1    louis      70    N/A
2     jack      40    N/A
3  jasmine      80    N/A

Pandas DataFrame에서 열 값을 조건으로 바꾸기

부울 조건을 사용하여 대상 요소를 지정할 수 있습니다.

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "grades": [30, 70, 40, 80],
    "result": ["N/A", "N/A", "N/A", "N/A"],
}

df = pd.DataFrame(data, columns=["name", "grades", "result"])

df.loc[df.grades > 50, "result"] = "success"

df.loc[df.grades < 50, "result"] = "fail"

print(df)

출력:

      name  grades   result
0  michael      30     fail
1    louis      70  success
2     jack      40     fail
3  jasmine      80  success

df.loc[df.grades>50, 'result']='success'는 값이 50보다 크면grades 열의 값을sucess로 바꿉니다.

df.loc[df.grades<50,'result']='fail'은 값이 50보다 작은 경우grades 열의 값을fail로 바꿉니다.

replace()메서드를 사용하여 값 수정

Pandas DataFrame에서 열 값을 바꾸는 또 다른 방법은Series.replace()메서드입니다.

Series.replace()구문

  • 하나의 단일 값 바꾸기
df[column_name].replace([old_value], new_value)
  • 여러 값을 동일한 값으로 대체
df[column_name].replace([old_value1, old_value2, old_value3], new_value)
  • 여러 값을 여러 값으로 바꾸기
df[column_name].replace(
    [old_value1, old_value2, old_value3], [new_value1, new_value2, new_value3]
)
  • 값을 전체 DataFrame의 새 값으로 교체
df.replace([old_value], new_value)

나머지 예제에서는 아래 DataFrame을 사용합니다.

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

print(df)

출력:

      name  salary
0  michael     700
1    louis     800
2     jack    1000
3  jasmine    1200

Pandas DataFrame에서 열 값을 여러 값으로 바꾸기

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["name"] = df["name"].replace(["michael", "louis"], ["karl", "lionel"])

print(df)

출력:

      name  salary
0     karl     700
1   lionel     800
2     jack    1000
3  jasmine    1200

Pandas DataFrame에서 열 값만 동일한 값으로 바꾸기

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["salary"] = df["salary"].replace([1000, 1200], 1500)

print(df)

출력:

      name  salary
0     karl     700
1   lionel     800
2     jack    1500
3  jasmine    1500

Pandas DataFrame에서 열 값을 하나의 값으로 바꾸기

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1200],
}

df = pd.DataFrame(data, columns=["name", "salary"])

df["salary"] = df["salary"].replace([700], 750)

print(df)

출력:

      name  salary
0     karl     750
1   lionel     800
2     jack    1000
3  jasmine    1200

전체 Pandas DataFrame의 값 바꾸기

import pandas as pd

data = {
    "name": ["michael", "louis", "jack", "jasmine"],
    "salary": [700, 800, 1000, 1000],
}

df = pd.DataFrame(data, columns=["name", "salary"])


df = df.replace([1000], 1400)

print(df)

출력:

      name  salary
0     karl     750
1   lionel     800
2     jack    1400
3  jasmine    1400

관련 문장 - Pandas DataFrame