Pandas 기본: DataFrame 메모리 및 연산

Beginner

This tutorial is from open-source community. Access the source code

소개

Pandas 기본 Lab 에 오신 것을 환영합니다! 이 Lab 에서는 Pandas 라이브러리의 몇 가지 기본적인 측면을 탐구합니다: DataFrame 메모리 사용량, if/truth 문 처리, 사용자 정의 함수 (UDF, User Defined Function) 메서드 사용, NA 값 처리, NumPy 와의 차이점, 그리고 스레드 안전성 고려 사항입니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 즉시 문제를 해결해 드리겠습니다.

DataFrame 메모리 사용량 이해

Pandas 는 DataFrame 의 메모리 사용량을 이해하기 위한 여러 가지 방법을 제공합니다. .info() 메서드를 사용하여 메모리 사용량을 포함한 요약을 확인할 수 있습니다.

import pandas as pd
import numpy as np

## Create a DataFrame
dtypes = ["int64", "float64", "datetime64[ns]", "timedelta64[ns]", "complex128", "object", "bool"]
n = 5000
data = {t: np.random.randint(100, size=n).astype(t) for t in dtypes}
df = pd.DataFrame(data)
df["categorical"] = df["object"].astype("category")

## Display DataFrame info
df.info()

Pandas 에서 if/truth 문 사용하기

Pandas 는 모호성 때문에 if/truth 문을 직접 사용하는 것을 지원하지 않습니다. 대신, .any(), .all(), 또는 .empty()와 같은 메서드를 사용하십시오.

## Check if any value in the Series is True
if pd.Series([False, True, False]).any():
    print("At least one True value in the Series")

사용자 정의 함수 (UDF) 메서드를 사용한 변형

UDF 를 사용하는 pandas 메서드를 사용할 때는 UDF 내부에서 DataFrame 을 변경하지 않도록 합니다. 대신, 변경하기 전에 복사본을 만드십시오.

def f(s):
    s = s.copy()
    s.pop("a")
    return s

df = pd.DataFrame({"a": [1, 2, 3], 'b': [4, 5, 6]})
df.apply(f, axis="columns")

NA 값 처리

Pandas 는 결측값을 가질 수 있는 정수를 표현하기 위해 nullable-integer 확장 데이터 유형 (extension dtypes) 을 제공합니다.

s_int = pd.Series([1, 2, 3, 4, 5], index=list("abcde"), dtype=pd.Int64Dtype())
s2_int = s_int.reindex(["a", "b", "c", "f", "u"])

NumPy 와의 차이점 이해

Pandas 와 NumPy 는 분산을 계산하는 방식에 약간의 차이가 있습니다. 두 라이브러리 간에 전환할 때 이를 고려하는 것이 중요합니다.

## pandas 에서의 분산
var_pandas = df.var()

## NumPy 에서의 분산
var_numpy = np.var(df.values)

Pandas 에서의 스레드 안전성 고려

Pandas 는 100% 스레드 안전 (thread safe) 하지 않습니다. 여러 스레드 간에 pandas 객체를 공유할 때는 주의하십시오.

바이트 순서 문제 처리

다른 바이트 순서를 가진 머신에서 생성된 데이터를 다룰 때 바이트 순서 문제에 직면할 수 있습니다. Pandas 에 전달하기 전에 데이터를 네이티브 시스템 바이트 순서로 변환하십시오.

x = np.array(list(range(10)), ">i4")  ## big endian
newx = x.byteswap().newbyteorder()  ## force native byteorder
s = pd.Series(newx)

요약

이 랩에서는 Pandas 라이브러리의 몇 가지 중요한 측면을 살펴보았습니다. 이러한 측면을 이해하면 Pandas 를 보다 효과적으로 활용하고 일반적인 함정을 피하는 데 도움이 될 것입니다.