개인공부

[Python] Pandas 함수 정리

여연찌 2024. 5. 9. 19:35

Pandas 불러오기

import pandas as pd

 

 

데이터를 파일(csv)로 저장

to_csv("저장위치/파일명.파일형식")

 

인덱스에 대해 설정을 해주지 않으면 기본값은 inedx= True 로

인덱스가 컬럼의 형태로 저장이 될 수 있다.

ex) unnamed 컬럼 생성

data.to_csv("tips_data.csv", index=True)

 

index 의 값을 False 로 설정해주면 인덱스 컬럼형태는 나오지 않음

data.to_csv("tips_data.csv", index=False)

 

* 저장할 때 인덱스 값을 설정하지 않았어도 불러올 때 인덱스컬럼을 제외하는 방법도 있다.

df = pd.read_csv("tips_data.csv",index_col=0)
df

 

 

데이터프레임 생성

pd.DataFrame()

df = pd.DataFrame({           # 데이터프레임 생성
    'A': [1,2,3],
    'B': ['a','b','c']
})			# 인덱스를 설정하지 않으면 기본값 0으로 자동부여
df

* 인덱스 지정

df = pd.DataFrame({
    'A': [1,2,3],
    'B': ['a','b','c']
},index=['idx1','idx2','idx3'])      
df

 

* 인덱스 정렬

df.sort_index()

 

*  특정 컬럼에 들어있는 값을 인덱스로 활용

df.set_index('A')

# A 컬럼의 정보들이 인덱스로 설정됨

 

* 인덱스 값을 새로 변경

df.index = ['1번','2번','3번']
df

 

* 인덱스 값을 0부터 시작하는 정수로 변경(인덱스값을 컬럼으로 변경)

# 기본값은 drop = False
df.reset_index()

 

* 현재 인덱스 값을 컬럼으로 변경하지 않고 초기화

df.reset_index(drop=True)

 

 

컬럼 이름 변경

데이터프레임.rename(columns={변경전컬럼:변경후컬럼})

df = df.rename(columns={'이름':'name'})

 

 

컬럼 삭제

del df['컬럼']

 

 

데이터 확인

df.head()  # 기본적으로 5개의 행에 대해서 불러옴 () 안에 숫자를 넣으면 그 수만큼 불러옴

df.info()       # 데이터에 대한 정보

# Non-Null Count 숫자로 null 값 확인 가능/ null 값일 경우 count 하지 않음

 

 

결측치 확인

df.isna()       # null 값이면 True

df['B'].isna()        # B 컬럼의 null 값 확인

df[df['B'].isna()]      # df 가 True 인 값(B 컬럼의 null 값) 일 때 df 를 불러줌

 

 

 

데이터 타입 확인

df.dtypes           # 데이터 타입 확인
df['tip'].dtype     # 컬럼의 데이터 타입 확인

 

 

데이터 타입 변경

astype()

df['total_bill'] = df['total_bill'].astype(str)       # 데이터 타입 변경
df['total_bill'] = df['total_bill'].astype(float).astype(int)
# 소숫점이 있을 경우 바로 int 형으로 바꿀 수 없어 float 형태로 바꾼 후에 int 로 바꿔준다

 

 

인덱스번호로 데이터 선택

data.iloc[0,2]
# 행과 열 번호를 통해 특정 데이터를 선택할 수 있음
# int 로 슬라이싱

 

 

인덱스와 컬럼명으로 데이터 선택

df.loc[:,'A']       # 인덱스와 컬럼명으로 슬라이싱

 

* 첫번째 행 데이터 전부 뽑아오기

df.iloc[0]
df.loc[:'a','A':'C']

# loc[] 를 사용하려면 인덱스 값이 별도로 있는 것이 출력하기에 편함

별도로 주지 않으면 자동으로 부여된 인덱스 값으로 슬라이싱 해야함

 

* 2개 이상의 컬럼을 선택할 경우

df[['A','B']]       # 2개 이상의 컬럼을 가져올 때는 리스트로 묶어주어야 함

 

 

조건에 따라 데이터 선택

df[df['sex']=='Male']       
# 데이터프레임 괄호안에 조건을 입력하면, 그 조건이 참인 경우에만 불러와준다

df[(df['sex']=='Male') & (df['smoker']=='Yes')].head(3)         
# & == and

df[(df['sex']=='Male') | (df['smoker']=='Yes')].head(3)     
# | == or

df.loc[df['size'].isin([1,2])]      
# 특정 컬럼에서 특정 값만 지정해서 출력 
# size 컬럼에서 2 와 3 인 값만 출력

 

컬럼 더하기 

df['total_bill']+df['tip']

 

컬럼 병합

 

concat

result_vertical = pd.concat([df1, df2], axis=0)
# 위아래로 데이터프레임 연결

result_horizontal = pd.concat([df1, df2], axis=1)
# 좌우로 데이터프레임 연결

merge

# SQL 의 JOIN 과 유사한 방식

merged_df = pd.merge(left_df, right_df, on='key', how='inner')
# key 라는 값이 inner join 일때

# how 인자에 inner, outer, left, right 등

# on 병합 기준이 되는 열

left_on 과 right_on:

병합할 열 이름이 다른 경우 사용

 

 

데이터집계

 

groupby()

# 그룹화 하여 연산을 수행하거나 연산결과를 새로운 데이터프레임으로 생성

 

메서드

mean() 평균

sum() 합

count() 갯수

max() 최대값

min() 최소값

 

first() 첫번째 나오는 값

 

* agg(list) 그룹별로 value 를 리스트 화 시켜줌

data = {
    'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
    'Value': [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)

df.groupby('Category').agg(list)

 

 

* 그룹화해서 집계계산 하기

df.groupby('day').mean()      
# 평균을 낼 수 없는 값들이 있기 때문에 타입에러


df[['day','total_bill','tip','size']].groupby('day').mean()       
# 평균을 낼 수 있는 데이터들을 선택하여 평균값출력


df[['sex','day','total_bill','tip','size']].groupby(['day','sex']).mean()     
# 2개 이상의 컬럼을 선택해야되기 때문에 리스트로 묶어준 후 그룹화


df[['sex','day','total_bill','tip','size']].\
  groupby(['day','sex']).\
  agg({'total_bill':'max','tip':'mean','size':'sum'})    
  # 각 열별로 원하는 조건으로 value 뽑아주기

 

 

Pivot Table()

data = {
    'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Value': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)

df


df.pivot_table(index='Date', columns='Category', values='Value', aggfunc='sum')
# date 는 인덱스로
# category 는 각각 컬럼으로
# aggfunc 에 sum 을 넣어 각 value 들의 합으로 집계

기준 테이블
피봇테이블

 

 

 

데이터 정렬하기

sort_values()

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 22, 30, 18, 27],
    'Score': [85, 90, 75, 80, 95]
}
df = pd.DataFrame(data)

df

df.sort_values(by='Age')      
# age 값을 기준으로 오름차순

df.sort_values(by='Age', ascending=False)   
# 내림차순

df.sort_values(by=['Age','Score'], ascending=False)     
# 여러개의 컬럼

df.sort_values(by=['Age','Score'], ascending=[True,False])    
# 각각 오름차순, 내림차순

기준 테이블

 

sort_index()

df.sort_index(ascending=False)   
# 인덱스 순으로 내림차순