@ddukbbok_kang

하고 싶은 건 일단 해봅니다.

Python/데이터 전처리

데이터프레임 연산(판다스/Pandas)

강떡볶 2022. 4. 11. 23:29
판다스 객체의 산술연산

 

STEP 1. 행/열 인덱스를 기준으로 모든 원소를 정렬
STEP 2. 동일한 위치에 있는 원소끼리 일대일로 대응
STEP 3. 일대일 대응이 되는 원소끼리 연산을 처리(단 대응되는 원소가 없으면 NaN으로 처리)

 

 

데이터프레임 vs 숫자
titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age', 'fare']]
print(df.head()) # 첫 5행만 표시
print('\n')
print(type(df))
print('\n')

# 데이터프레임에 숫자 10 더하기
addition = df + 10
print(addition.head()) # 첫 5행만 표시
print('\n')
print(type(addition))

  • DataFrame 객체 + 연산자(+, -, *, /) + 숫자

 

 

데이터프레임 vs 데이터프레임
# 데이터프레임끼리 연산하기 (addition = df)
subtraction = addition - df
print(subtraction.head()) # 마지막 5행을 표시

  • 한 쪽에 원소가 존재하지 않거나 NaN이면 결과는 NaN
  • 데이터프레임의 연산자 활용 : DataFrame1 + 연산자(+, -, *, /) + DataFrame2

 

 

그룹 객체 만들기
titanic = sns.load_dataset('titanic')

titanic_groupby = titanic.groupby('pclass').count()
titanic_groupby

  • groupby()로 'pclass'열을 기준으로 그룹화한 다음 count() 함수로 개수 반환
  • 분석 작업에 매우 많이 활용
  • 적용 가능한 판다스 기본 집계 함수 : mean()/max()/min()/sum()/count()/var()/std() 등

 

그룹 연산 메소드
titanic_groupby = titanic.groupby('pclass')[['sex', 'age']].count()
titanic_groupby

 

titanic.groupby('pclass')['age'].agg([max,min])

 

agg_format = {'age':'max', 'sibsp':'sum', 'fare':'mean'}
titanic.groupby('pclass').agg(agg_format)

  • agg() 내에 함수를 리스트로 입력해 적용될 칼럼에 다양한 함수를 적용 가능
  • agg() 내에 입력 값으로 딕셔너리 형태로 적용될 칼럼과 aggregation 함수를 입력해 각각 다른 함수를 적용

 

 

group 객체.transform(매핑함수)
def minusmean(x):
    return x - x.mean()
grouped = titanic.groupby(['pclass'])
age_minusmean = grouped.age.transform(minusmean)
print(age_minusmean.loc[0:4])

  • 원본 데이터프레임과 같은 형태로 기존 행 인덱스와 열 이름으로 반환
  • 'age'열에 대한 minusmean 함수 값만 출력하므로 시리즈 형태로 출력됨