python
판다스에서 열 이름을 쉽게 변경하는 방법: 초보자를 위한 안내서

판다스에서 열 이름 쉽게 변경하기: 초보자를 위한 안내서

MoeNagy Dev

판다스에서 열 이름 변경하기

판다스 DataFrame 개요

판다스 DataFrame은 행과 열이 있는 이차원 테이블 형태의 데이터 구조입니다. DataFrame의 각 열은 다른 데이터 유형을 가지며, 열은 개별적으로 액세스하고 조작할 수 있습니다.

판다스 DataFrame 구조 이해하기

import pandas as pd
 
# 샘플 DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['New York', 'London', 'Paris']}
 
df = pd.DataFrame(data)
print(df)

출력 결과:

       Name  Age       City
0    Alice   25  New York
1      Bob   30    London
2  Charlie   35     Paris

열 데이터 액세스와 조작하기

DataFrame의 개별 열은 속성(attribute)로 열 이름을 사용하거나, 대괄호 안에 키(key)로 열에 액세스할 수 있습니다:

print(df['Name'])
print(df.Age)

출력 결과:

0    Alice
1      Bob
2  Charlie
Name: Name, dtype: object
0    25
1    30
2    35
Name: Age, dtype: int64

새로운 값을 열에 할당할 수도 있습니다:

df['Country'] = ['USA', 'UK', 'France']
print(df)

출력 결과:

       Name  Age       City Country
0    Alice   25  New York     USA
1      Bob   30    London      UK
2  Charlie   35     Paris   France

열 이름 변경하기

데이터를 다룰 때 판다스 DataFrame에서 열 이름 변경은 흔한 작업입니다. 이를 위한 몇 가지 방법이 있습니다.

rename() 메서드 사용하기

rename() 메서드를 사용하면 하나 이상의 열 이름을 변경할 수 있습니다. columns 매개변수에는 사전(dictionary)이나 함수를 전달할 수 있습니다.

# 사전(dictionary)을 사용하여 단일 열 이름 변경하기
df = df.rename(columns={'Name': 'Full Name'})
print(df)

출력 결과:

       Full Name  Age       City Country
0        Alice   25  New York     USA
1          Bob   30    London      UK
2      Charlie   35     Paris   France

rename()에 사전 전달하기

columns 매개변수에 사전을 전달할 수 있으며, 이 때 키는 이전 열 이름이고 값은 새로운 열 이름입니다.

# 사전을 사용하여 여러 열 이름 변경하기
df = df.rename(columns={'Full Name': 'Participant', 'Age': 'Years Old'})
print(df)

출력 결과:

       Participant  Years Old       City Country
0        Alice     25  New York     USA
1          Bob     30    London      UK
2      Charlie     35     Paris   France

rename()에 함수 전달하기

함수를 columns 매개변수에 전달할 수도 있으며, 이 함수는 각 열 이름에 적용됩니다.

# 함수를 사용하여 열 이름 변경하기
df = df.rename(columns=lambda x: x.lower().replace(' ', '_'))
print(df)

출력 결과:

       participant  years_old       city country
0        alice     25  New York     USA
1          bob     30    London      UK
2      charlie     35     Paris   France

여러 열 동시에 이름 변경하기

사전이나 튜플 리스트를 columns 매개변수에 전달하여 여러 열 이름을 변경할 수 있습니다.

# 여러 열 동시에 이름 변경하기
df = df.rename(columns={'participant': 'name', 'years_old': 'age'})
print(df)

출력 결과:

       name  age       city country
0    alice   25  New York     USA
1      bob   30    London      UK
2  charlie   35     Paris   France

직접 열 이름 수정하기

DataFrame의 columns 속성에 직접 액세스하여 열 이름을 수정할 수도 있습니다.

열 이름 액세스 및 업데이트하기

# 열 이름 액세스 및 업데이트하기
df.columns = ['Name', 'Age', 'Location', 'Nationality']
print(df)

출력 결과:

       Name  Age    Location Nationality
0    alice   25  New York         USA
1      bob   30    London           UK
2  charlie   35     Paris        France

리스트 컴프리헨션을 사용하여 열 이름 변경하기

리스트 컴프리헨션을 사용하여 열 이름에 변환을 적용할 수 있습니다.

# 리스트 컴프리헨션을 사용하여 열 이름 변경하기
df.columns = [col.upper() for col in df.columns]
print(df)

출력 결과:

       NAME  AGE    LOCATION NATIONALITY
0    alice   25  New York         USA
1      bob   30    London           UK
2  charlie   35     Paris        France

누락된 또는 중복된 열 이름 처리하기

열 이름이 누락되거나 중복된 경우에 대비하는 것이 중요합니다.

누락된 열 이름 확인 및 해결하기

# 누락된 열 이름이 있는 DataFrame 생성하기
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

출력 결과:

       Name  Age
0    Alice   25
1      Bob   30
2  Charlie   35

누락된 열 이름 수정을 위해 rename() 메서드를 사용하거나 columns 속성에 새 이름을 직접 할당할 수 있습니다.

# 누락된 열 이름 변경하기
df = df.rename(columns={None: 'New Column'})
print(df)

출력 결과:

       Name  Age     New Column
0    Alice   25            NaN
1      Bob   30            NaN
2  Charlie   35            NaN

중복된 열 이름 해결하기

# 중복된 열 이름이 있는 DataFrame 생성하기
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'Name': [1, 2, 3]}
df = pd.DataFrame(data)
print(df)

출력 결과:

       Name  Age  Name
0    Alice   25     1
1      Bob   30     2
2  Charlie   35     3

중복된 열 이름을 해결하기 위해 rename() 메서드나 set_axis() 메서드를 사용할 수 있습니다.

# 중복된 열 이름 해결하기
df = df.rename(columns={'Name_x': 'Name', 'Name_y': 'Name_2'})
print(df)

출력 결과:

       Name  Age  Name_2
0    Alice   25       1

고급 열 이름 변경 기술

Pandas는 더 복잡한 열 이름 변경 시나리오에 대한 추가 기술을 제공합니다.

특정 패턴을 기반으로 열 이름 변경하기

# 패턴에 기반한 열 이름 변경하기
data = {'feature_1': [1, 2, 3], 'feature_2': [4, 5, 6], 'target': [10, 20, 30]}
df = pd.DataFrame(data)
df = df.rename(columns=lambda x: x.replace('feature_', 'col_'))
print(df)

출력:

   col_1  col_2  target
0      1      4      10
1      2      5      20
2      3      6      30

정규 표현식을 사용하여 열 이름 변경하기

# 정규 표현식을 사용하여 열 이름 변경하기
data = {'feature1_a': [1, 2, 3], 'feature1_b': [4, 5, 6], 'feature2_a': [7, 8, 9]}
df = pd.DataFrame(data)
df = df.rename(columns=lambda x: re.sub(r'feature(\d+)_(\w+)', r'col_\1_\2', x))
print(df)

출력:

   col_1_a  col_1_b  col_2_a
0        1        4        7
1        2        5        8
2        3        6        9

다중 레벨 열 인덱스에서 열 이름 변경하기

# 다중 레벨 열 인덱스에서 열 이름 변경하기
data = {('group1', 'A'): [1, 2, 3], ('group1', 'B'): [4, 5, 6], ('group2', 'C'): [7, 8, 9]}
df = pd.DataFrame(data)
df.columns = pd.MultiIndex.from_tuples([('Group 1', 'Feature A'), ('Group 1', 'Feature B'), ('Group 2', 'Feature C')])
df = df.rename(columns=lambda x: (x[0].replace('Group', 'G'), x[1]))
print(df)

출력:

   (G 1, Feature A)  (G 1, Feature B)  (G 2, Feature C)
0                 1                 4                 7
1                 2                 5                 8
2                 3                 6                 9

데이터프레임 생성 중 열 이름 변경하기

Pandas 데이터프레임을 생성하는 동안 열 이름을 변경할 수도 있습니다.

데이터프레임 초기화 중에 열 이름 전달하기

# 데이터프레임 초기화 중에 열 이름 변경하기
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)

출력:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

파일에서 데이터 읽을 때 열 이름 변경하기

# 파일에서 데이터를 읽을 때 열 이름 변경하기
df = pd.read_csv('data.csv', names=['Name', 'Age', 'City'])
print(df)

열 이름 변경 후 열 순서 유지하기

열 이름을 변경할 때 열 순서를 유지하는 것이 중요합니다.

원래 열 순서 유지하기

# 원래 열 순서 유지하기
df = df[['Name', 'Age', 'City']]
print(df)

출력:

       Name  Age       City
0    Alice   25  New York
1      Bob   30    London
2  Charlie   35     Paris

열 이름 변경 후 열 순서 변경하기

# 열 이름 변경 후 열 순서 변경하기
df = df[['City', 'Name', 'Age']]
print(df)

출력:

       City       Name  Age
0  New York    Alice   25
1    London      Bob   30
2     Paris  Charlie   35

여러 데이터프레임에 대한 열 이름 변경 적용하기

여러 관련 데이터프레임을 다룰 때 일관된 열 이름 규칙을 유지해야 할 때가 많습니다.

관련된 데이터프레임에서 열 이름 변경하기

# 관련된 데이터프레임에서 열 이름 변경하기
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
df2 = pd.DataFrame({'Name': ['Charlie', 'David'], 'City': ['New York', 'London']})
 
df1 = df1.rename(columns={'Name': 'Participant', 'Age': 'Years Old'})
df2 = df2.rename(columns={'Name': 'Participant', 'City': 'Location'})
 
print(df1)
print(df2)

출력:

   Participant  Years Old
0       Alice         25
1         Bob         30

   Participant   Location
0     Charlie  New York
1       David    London

일관된 열 이름 규칙 유지하기

# 일관된 열 이름 규칙 유지하기
df1 = df1.rename(columns={'Participant': 'name', 'Years Old': 'age'})
df2 = df2.rename(columns={'Participant': 'name', 'Location': 'city'})
 
print(df1)
print(df2)

출력:

      name  age
0   Alice   25
1     Bob   30

      name     city
0  Charlie  New York
1    David   London

열 이름 변경 워크플로 자동화하기

열 이름 변경을 더 효율적으로 하기 위해 재사용 가능한 함수를 개발하고 데이터 처리 파이프라인에 통합할 수 있습니다.

반복문 및 조건문

파이썬에서 반복문과 조건문은 프로그램의 흐름을 제어하고 반복적인 작업을 자동화하는 데 필수적입니다. 일반적인 반복문 구조와 조건문을 살펴보겠습니다.

for 반복문

for 반복문은 순서(리스트, 튜플 또는 문자열과 같은)나 다른 반복 가능한 객체를 반복하는 데 사용됩니다. 다음은 숫자 리스트를 반복하고 각 숫자를 출력하는 for 반복문의 예입니다:

numbers = [1, 2, 3, 4, 5]
for num in numbers:
    print(num)

출력:

1
2
3
4
5

range() 함수를 사용하여 반복할 숫자 시퀀스를 생성할 수도 있습니다:

for i in range(1, 6):
    print(i)

출력:

1
2
3
4
5

while 반복문

while 반복문은 특정 조건이 참인 동안 코드 블록을 실행합니다. 다음은 5부터 1까지 카운트다운하는 while 반복문의 예입니다:

count = 5
while count > 0:
    print(count)
    count -= 1
print("Blast off!")

출력:

5
4
3
2
1
Blast off!

조건문

if-else와 같은 조건문은 특정 조건에 따라 결정을 내릴 수 있게 해줍니다. 다음은 간단한 if-else 문의 예입니다:

age = 18
if age >= 18:
    print("성인입니다.")
else:
    print("미성년자입니다.")

출력:

성인입니다.

elif를 사용하여 여러 조건을 확인할 수도 있습니다:

score = 85
if score >= 90:
    print("A를 받았습니다!")
elif score >= 80:
    print("B를 받았습니다.")
elif score >= 70:
    print("C를 받았습니다.")
else:
    print("더 개선해야 합니다.")

출력:

B를 받았습니다.

중첩된 반복문과 조건문

또한 루프와 조건문을 중첩하여 보다 복잡한 로직을 만들 수도 있습니다. 다음은 숫자가 소수인지 확인하는 중첩된 for 루프의 예입니다:

for num in range(2, 21):
    is_prime = True
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            is_prime = False
            break
    if is_prime:
        print(f"{num}은 소수입니다.")
    else:
        print(f"{num}은 소수가 아닙니다.")

출력:

2은 소수입니다.
3은 소수입니다.
4은 소수가 아닙니다.
5은 소수입니다.
6은 소수가 아닙니다.
7은 소수입니다.
8은 소수가 아닙니다.
9은 소수가 아닙니다.
10은 소수가 아닙니다.
11은 소수입니다.
12은 소수가 아닙니다.
13은 소수입니다.
14은 소수가 아닙니다.
15은 소수가 아닙니다.
16은 소수가 아닙니다.
17은 소수입니다.
18은 소수가 아닙니다.
19은 소수입니다.
20은 소수가 아닙니다.

함수

함수는 파이썬의 핵심 구성 요소입니다. 함수를 사용하면 코드를 관련된 부분으로 그룹화하여 프로그램을 보다 구조화되고 모듈화되고 재사용 가능하게 만들 수 있습니다.

함수 정의

파이썬에서 함수를 정의하려면 def 키워드 다음에 함수 이름, 괄호 세트 및 콜론을 사용합니다. 함수 몸체를 구성하는 코드는 들여쓰기됩니다.

다음은 사용자에게 인사하는 간단한 함수의 예입니다:

def greet(name):
    print(f"안녕, {name}!")
 
greet("Alice")

출력:

안녕, Alice!

여러 인수를 사용하는 함수를 정의할 수도 있습니다:

def add_numbers(a, b):
    return a + b
 
result = add_numbers(5, 3)
print(result)

출력:

8

기본 및 키워드 인수

함수에는 매개변수가 함수 호출 시 제공되지 않을 경우 사용되는 기본 인수가 있을 수 있습니다. 다음은 예입니다:

def greet(name, message="Hello"):
    print(f"{message}, {name}!")
 
greet("Alice")
greet("Bob", "Hi")

출력:

Hello, Alice!
Hi, Bob!

코드를 더 읽기 쉽게 만들 수 있는 키워드 인수를 사용할 수도 있습니다:

def calculate_area(length, width):
    return length * width
 
# 키워드 인수 사용
area = calculate_area(length=5, width=3)
print(area)

출력:

15

범위와 변수의 수명

변수의 범위는 코드에서 액세스할 수 있는 위치를 결정합니다. 파이썬은 지역 및 전역 범위를 갖습니다. 함수 내에서 정의된 변수는 지역 범위를 갖고 함수 외부에서 정의된 변수는 전역 범위를 갖습니다.

차이를 보여주는 예제입니다:

global_variable = "전역 변수입니다!"
 
def my_function():
    local_variable = "지역 변수입니다."
    print(global_variable)
    print(local_variable)
 
my_function()
print(global_variable)
# print(local_variable)  # 오류가 발생합니다

출력:

전역 변수입니다!
지역 변수입니다.
전역 변수입니다!

local_variablemy_function() 외부에서 액세스할 수 없습니다. 지역 범위를 갖기 때문입니다.

재귀 함수

재귀 함수는 문제를 해결하기 위해 자신을 호출하는 함수입니다. 다음은 숫자의 팩토리얼을 계산하는 재귀 함수의 예입니다:

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)
 
print(factorial(5))

출력:

120

이 예제에서 factorial() 함수는 n이 0 또는 1인 기본 사례에 도달할 때까지 작은 값의 n으로 자신을 호출합니다. 그런 다음 1을 반환합니다.

모듈과 패키지

파이썬에서 모듈과 패키지는 코드를 조직화하고 재사용하기 위해 사용됩니다. 모듈은 단일 파이썬 파일이며 패키지는 관련된 모듈의 컬렉션입니다.

모듈 가져오기

모듈에서 코드를 사용하려면 가져와야 합니다. 내장된 math 모듈을 가져오는 예입니다:

import math
 
print(math.pi)
print(math.sqrt(16))

출력:

3.141592653589793
4.0

특정 함수 또는 변수를 모듈에서 가져올 수도 있습니다:

from math import pi, sqrt
 
print(pi)
print(sqrt(16))

출력:

3.141592653589793
4.0

모듈 생성

자체 모듈을 만들려면 .py 확장자를 가진 파일에 파이썬 코드를 저장하기만 하면 됩니다. 예를 들어, my_module.py라는 이름의 모듈을 만들고 greet()라는 함수를 정의해 보겠습니다:

# my_module.py
def greet(name):
    print(f"안녕하세요, {name}!")

그런 다음 다른 파이썬 파일에서 greet() 함수를 가져와 사용할 수 있습니다:

# main.py
import my_module
 
my_module.greet("Alice")

출력:

안녕하세요, Alice!

패키지

패키지는 관련된 모듈을 계층 구조로 구성하는 데 사용됩니다. 패키지를 만들려면 __init__.py 파일이 있는 디렉토리를 만들어야 합니다. 다음은 예입니다:

my_package/
    __init__.py
    math_utils.py
    string_utils.py

__init__.py 파일은 비어 있어도 꼭 있어야 하며 디렉토리를 패키지로 인식하도록 해줍니다.

그런 다음 패키지 내에서 모듈에서 함수를 가져올 수 있습니다:

# main.py
from my_package.math_utils import add
from my_package.string_utils import reverse
 
print(add(5, 3))
print(reverse("hello"))

출력:

8
olleh

결론

이 튜토리얼에서는 파이썬의 핵심 개념인 루프, 조건문, 함수, 모듈 및 패키지에 대해 알아보았습니다. 이러한 도구는 파이썬에서 견고하고 동적인 프로그램을 작성하는 데 필수적입니다.

기억하세요. 파이썬 기술을 향상시키는 가장 좋은 방법은 실습하고 실험하며 계속해서 학습하는 것입니다. 파이썬 라이브러리와 모듈의 방대한 생태계를 탐색하고 더 깊은 정보를 얻기 위해 공식 파이썬 문서를 충분히 활용해보세요.

즐거운 코딩하세요!

MoeNagy Dev