- 과거 내용
- DataFrame - 함수 적용
1. apply
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#개별 적용
df=df.apply(np.sqrt)
col1 col2 col3
row1 1.000000 1.414214 1.732051
row2 2.000000 2.236068 2.449490
row3 2.645751 2.828427 3.000000
#축 기준 적용
df=dp.apply(np.sum)
col1 12
col2 15
col3 18
dtype: int64
축 기준이 불가한 경우 개별 적용하여 결과값을 출력한다.
옵션으로 axis를 이용하여 행 또는 열을 기준으로 결과값을 출력한다.
또한 옵션으로 result_type을 어떤 것을 선택하냐에 따라 시리즈, 데이터 프레임 등
다른 결과 형태가 나올 수 있다.
2. applymap
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#요소별 적용
df=df.applymap(lambda x:x^2)
col1 col2 col3
row1 1 4 9
row2 16 25 36
row3 49 64 81
요소별로 각각 함수를 적용할 때 사용한다.
na_action이라는 옵션을 통해 NaN값의 무시여부를 정할 수 있다.
3. pipe
#함수에 함수를 적용
df.pipe(함수1).pipe(함수2)
함수에 함수를 우선 순위 있이 적용할 때 사용한다.
앞에 있는 함수가 더 먼저 실행된다.
4. agg
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#여러 함수 적용
df=df.agg(['min','max','sum'])
col1 col2 col3
min 1 2 3
max 7 8 9
sum 12 15 18
apply와 비슷하지만 agg는 여러 함수를 동시에 적용할 수 있다.
5. transform
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#단일 요소에 여러 함수 적용
df=df.transform(['sqrt','exp'])
col1 col2 col3
sqrt exp sqrt exp sqrt exp
row1 1.000000 2.718282 1.414214 7.389056 1.732051 20.085537
row2 2.000000 54.598150 2.236068 148.413159 2.449490 403.428793
row3 2.645751 1096.633158 2.828427 2980.957987 3.000000 8103.083928
agg와 transform의 관계는 apply와 applymap과의 관계와 비슷하다.
즉 transform은 단일 요소에 여러 함수를 적용할 수 있다.
6. eval
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#문자열 형태의 계산식
df=df.eval('col4=col1*col2*col3',inplace=False)
col1 col2 col3 col4
row1 1 2 3 6
row2 4 5 6 120
row3 7 8 9 504
문자열로 된 계산식을 실행할 수 있게 해준다.
inplace는 True인 경우 원본이 변경되는 것을 막는다.
- DataFrame - 인덱싱
1. at
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#하나의 스칼라 값에 접근
df.at['row1','col1']='3'
col1 col2 col3
row1 3 2 3
row2 4 5 6
row3 7 8 9
하나의 스칼라 값에 접근하여 값을 변경하거나 값을 얻을 때 at를 사용한다.
loc를 사용해 시리즈를 얻고 at를 사용해 시리즈의 스칼라값을 얻을 수 있다.
2. loc
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#시리즈 형태로 반환
df= df.loc[df['col1']>4, ['col2']]
col2
row3 8
값을 시리즈 형태로 반환한다. 조건을 통해 특정 시리즈만 반환할 수 있고,
값을 변경할 수도 있다.
3. iat
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#정수 기반 조회
df.iat[1,2] = 'A'
col1 col2 col3
row1 1 2 3
row2 4 5 A
row3 7 8 9
at는 'col1', 'row1' 등을 사용했다면 iat는 정수를 사용하여 인덱싱한다.
4. iloc
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#정수로 인덱싱
df=df.iloc[0:2]
col1 col2 col3
row1 1 2 3
row2 4 5 6
0:2 즉 0,1 줄인 row1, row2를 출력하는 것이다.
loc와 다르게 정수를 사용해서 값을 인덱싱한다.
iloc['행','열']와 같은 형태로 하나의 값에 접근하거나 변경할 수 있다.
5. head
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#n개의 행 반환
df=df.head(2)
col1 col2 col3
row1 1 2 3
row2 4 5 6
양수인 경우 위에서 n개의 행, 음수인 경우 뒤에서 n개의 행을 반환한다.
위와 같이 equal로 나타낸 경우 원본 값이 변경된다.
6. tail
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#n개의 행 반환
df=df.tail(2)
col1 col2 col3
row2 4 5 6
row3 7 8 9
head와 반대로 양수인 경우 뒤에서 n개의 행, 음수인 경우 앞에서 n개의 행을 반환한다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
EDA - 1단계 : 데이터 다루기 - 정렬, 결합 (3) | 2023.07.11 |
---|---|
EDA - 1단계 : 데이터 다루기 - 비교, 필터링, 결측치 (2) | 2023.07.10 |
EDA - 1단계 : 데이터 다루기 - 객체 내 연산 (1) | 2023.07.07 |
EDA - 1단계 : 데이터 다루기 - 객체 간 연산 (1) | 2023.07.07 |
토이프로젝트 - (9) 다변량 선형 확률과정 - 3단계 (2) | 2023.06.29 |