pandas : 행과 열로 이루어진 2차원 데이터를 효율적으로 가공/처리할 수 있는 기능 제공
1. Pandas 객체
(1) Series
- 인덱스와 컬럼 하나로 이루어진 데이터 구조체
(2) DataFrame
- 칼럼이 여러개인 데이터 구조체
* Series가 여러개 모인 것
2. DataFrame 생성
import pandas as pd
df = pd.DataFrame([['a','b','c'],
['d','e','f'],
['g','h','i']], columns=[1,2,3], index=list('012'))
print(df)
- columns와 index는 리스트의 형태로 전달하며 지정하지 않으면 자동으로 생성해준다
# DataFrame 정보 읽기
print(df.shape) # 행과 열의 크기
print(df.info()) # 총 데이터 수와 데이터 타입, null의 개수를 알려줌
print(df.describe()) # 데이터 분포도 확인
# 값 확인하기
print(df.value_counts()) # 데이터의 분포도
print(df.head()) # 데이터를 위에서부터 5행 출력
print(df.head(1)) # 데이터 맨 위
(1) 딕셔너리를 이용한 DataFrame 생성
dict = {'이름':['홍길동','전우치','임꺽정'],
'나이':[30, 20, 40],
'성별':['남','남','남']}
df = pd.DataFrame(dict)
3. DataFrame 수정/삭제
dict = {'이름':['홍길동','전우치','임꺽정'],
'나이':[30, 20, 40],
'성별':['남','남','남']}
df = pd.DataFrame(dict)
# 데이터 수정
df['나이'] = 0
dict = {'이름':['홍길동','전우치','임꺽정'],
'나이':[30, 20, 40],
'성별':['남','남','남']}
df = pd.DataFrame(dict)
# 데이터 삭제
df = df.drop('성별', axis=1)
4. DataFrame 데이터 셀렉션 및 필터링
(1) [ '컬럼명' ]
df = pd.DataFrame([['a','b','c'],
['d','e','f'],
['g','h','i']], columns=['A','B','C'], index=list('xyz'))
print(df['A'])
print(df[df > 'd'])
(2) iloc[ '행번호', '열번호' ], loc[ 'index명', 'column명' ]
df = pd.DataFrame([['a','b','c'],
['d','e','f'],
['g','h','i']], columns=['A','B','C'], index=list('xyz'))
# iloc[]
print(df.iloc[0]) # 0번째 행
print(df.iloc[1,0]) # 1번째 행 0번째 열
print(df.iloc[0:2,1:3]) # 0번째부터 1번째 행, 1번째부터 2번째열
# loc[ ]
print(df.loc['x']) # 'x' 행
print(df.loc['y','B']) # 'y'행, 'B'열
print(df.loc['x':'y','A':'C']) # 'x'부터'y'행, 'A'부터'C'열
5. DataFrame 정렬, Aggregation, GroupBy
(1) 정렬
df = pd.DataFrame([[3,2,4],
[1,5,9],
[6,8,7]], columns=list('abc'), index=list('ABC'))
# by=['컬럼명']
# 오름차순 정렬
print(df.sort_values(by=['a']))
# 내림차순 정렬 ascending=False 값 입력
print(df.sort_values(by=['a'], ascending=False))
(2) Aggregation 함수
df = pd.DataFrame([[3,2,4],
[1,5,9],
[6,8,7]], columns=list('abc'), index=list('ABC'))
# min(), max()
print(df.min())
print(df.max())
# print
#----------df.min()----------
# a 1
# b 2
# c 4
# dtype: int64
#----------df.max()----------
# a 6
# b 8
# c 9
# dtype: int64
# count()
print(df.count())
# print
#----------df.count()----------
# a 3
# b 3
# c 3
# dtype: int64
# mean()
print(df.mean())
# print
#----------df.mean()----------
# a 3.333333
# b 5.000000
# c 6.666667
# dtype: float64
(3) .apply() 사용자 정의 함수
df = pd.DataFrame([[3,2,4],
[1,5,9],
[6,8,7]], columns=list('abc'), index=list('ABC'))
df_apply = df.apply(lambda x : x*2)
# print
# a b c
# A 6 4 8
# B 2 10 18
# C 12 16 14
(4) groupby()
by 파라미터에 적은 컬럼을 기준으로 그룹화
df = pd.DataFrame({'학년':[1,1,2,3,2,1],
'반':[5,2,2,3,3,5],
'이름':['짱구','철수','유리','맹구','훈이','수지']})
# groupby()
df_group = df.groupby(by='학년')
# 그룹화한 객체에 Aggregation 함수 적용
display(df_group.count())
- .agg() : 여러개의 Aggregation함수를 적용할 때 사용할 수 있다
df = pd.DataFrame({'학년':['1학년','2학년','1학년','2학년'],
'반':['1반','2반','1반','2반'],
'국어':[80, 90, 100, 70],
'수학':[70, 55, 60, 100],
'영어':[88, 65, 95, 77]}, index=['1반','2반','3반','4반'])
df_group = df.groupby(by='학년')
# 여러개의 함수를 작성할 때는 리스트의 형태로 전달
print(df_group.agg(['sum','mean']))
# 국어 수학 영어
# sum mean | sum mean | sum mean
# 학년
# 1학년 180 90.0 | 130 65.0 | 183 91.5
# 2학년 160 80.0 | 155 77.5 | 142 71.0
6. concat()
7. merge()
8. join()
'수업정리 > PYTHON' 카테고리의 다른 글
import Numpy (0) | 2023.06.01 |
---|