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() # 데이터에 대한 정보
결측치 확인
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)
# 인덱스 순으로 내림차순
'개인공부' 카테고리의 다른 글
Python 데이터전처리 & 시각화 (0) | 2024.05.15 |
---|---|
[Python] 시각화 그래프 (0) | 2024.05.10 |
파이썬 개인 과제 (0) | 2024.05.02 |
[python] return 과 print 의 차이? (0) | 2024.04.26 |
[python] 빈 리스트 생성 [] 와 list() 의 차이 (0) | 2024.04.04 |