Pandas 연습 문제
문제 1
다음 코드의 출력 결과는 무엇일까요?
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
import pandas as pd
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
-
b 2 c 3 d 4 dtype: int64
b 2 c 3 d 4 dtype: int64
-
2 3 4
2 3 4
-
b 2 c 3 d 4 e 5 dtype: int64
b 2 c 3 d 4 e 5 dtype: int64
-
a 1 b 2 c 3 d 4 dtype: int64
a 1 b 2 c 3 d 4 dtype: int64
문제 2
Series의 apply() 메서드를 사용할 때, 가장 효율적인 방법은 무엇인가요?
- 항상 lambda 함수 사용
- 가능한 NumPy 벡터화 연산 사용
- 항상 for 루프로 직접 구현
- Series를 리스트로 변환 후 리스트 컴프리헨션 사용
문제 3
s.map()
과 s.apply()
의 주요 차이점은 무엇인가요?
- map은 딕셔너리를 인자로 받을 수 있지만, apply는 불가능
- apply는 Series 전체에 대한 연산 가능, map은 개별 요소에만 적용
- map은 결측치를 자동으로 처리하지만, apply는 그렇지 않음
- apply는 반환값의 형태가 자유롭지만, map은 항상 Series 반환
문제 4
다음 코드의 출력 결과는 무엇인가요?
import pandas as pd
import numpy as np
s = pd.Series([1, 2, np.nan, 4, 5])
print(s.fillna(s.mean()))
import pandas as pd
import numpy as np
s = pd.Series([1, 2, np.nan, 4, 5])
print(s.fillna(s.mean()))
-
0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 dtype: float64
0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 dtype: float64
-
0 1.0 1 2.0 2 3.5 3 4.0 4 5.0 dtype: float64
0 1.0 1 2.0 2 3.5 3 4.0 4 5.0 dtype: float64
-
0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 dtype: float64
0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 dtype: float64
-
0 1.0 1 2.0 2 NaN 3 4.0 4 5.0 dtype: float64
0 1.0 1 2.0 2 NaN 3 4.0 4 5.0 dtype: float64
문제 5
Series의 value_counts() 메서드 사용 시, 상대 빈도를 계산하려면 어떻게 해야 하나요?
- value_counts(normalize=True)
- value_counts(relative=True)
- value_counts(percentage=True)
- value_counts().div(len(s))
문제 6
Series의 결측치를 가장 효과적으로 처리하는 방법은 무엇인가요?
- 항상 dropna()로 모든 결측치 제거
- 항상 fillna()로 평균값 대체
- 항상 interpolate()로 보간
- 데이터의 특성과 분석 목적을 고려하여 적절한 방법 선택
문제 7
MultiIndex Series에서 특정 레벨의 인덱스만 선택하는 올바른 방법은 무엇인가요?
- s.index.get_level_values(level)
- s.select_level(level)
- s.index.levels[level]
- s.level_select(level)
문제 8
다음 코드의 출력 결과는 무엇인가요?
import pandas as pd
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])
print(pd.concat([s1, s2], axis=1))
import pandas as pd
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])
print(pd.concat([s1, s2], axis=1))
-
0 1 a 1.0 NaN b 2.0 4.0 c 3.0 5.0 d NaN 6.0
0 1 a 1.0 NaN b 2.0 4.0 c 3.0 5.0 d NaN 6.0
-
0 1 a 1 NaN b 2 4 c 3 5 d NaN 6
0 1 a 1 NaN b 2 4 c 3 5 d NaN 6
-
a 1 b 2 c 3 b 4 c 5 d 6
a 1 b 2 c 3 b 4 c 5 d 6
-
a 1 4 b 2 5 c 3 6
a 1 4 b 2 5 c 3 6
문제 9
Series의 astype()
메서드로 데이터 타입을 'category'로 변환하면 어떤 이점이 있나요?
- 메모리 사용량 감소
- 연산 속도 향상
- 결측치 자동 처리
1)
과2)
모두 해당
문제 10
다음 코드의 출력 결과는 무엇인가요?
import pandas as pd
s = pd.Series(['a', 'b', 'c', 'a', 'b', 'c', 'a'])
print(s.value_counts())
import pandas as pd
s = pd.Series(['a', 'b', 'c', 'a', 'b', 'c', 'a'])
print(s.value_counts())
-
a 3 b 2 c 2 dtype: int64
a 3 b 2 c 2 dtype: int64
-
a 3 b 2 c 2
a 3 b 2 c 2
-
a 0.428571 b 0.285714 c 0.285714 dtype: float64
a 0.428571 b 0.285714 c 0.285714 dtype: float64
-
a 3 c 2 b 2 dtype: int64
a 3 c 2 b 2 dtype: int64
문제 11
DataFrame에서 특정 열을 삭제하려면 어떤 메서드를 사용해야 하나요?
- remove()
- delete()
- drop()
- discard()
문제 12
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.T
print(result)
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.T
print(result)
-
A B 0 1 4 1 2 5 2 3 6
A B 0 1 4 1 2 5 2 3 6
-
0 1 2 A 1 2 3 B 4 5 6
0 1 2 A 1 2 3 B 4 5 6
-
0 1 A 1 2 B 4 5
0 1 A 1 2 B 4 5
-
A B 0 1 4 1 2 5
A B 0 1 4 1 2 5
문제 13
DataFrame에서 인덱스를 재설정하는 방법은 무엇인가요?
- reset_index()
- reindex()
- set_index()
- index_reset()
문제 14
DataFrame의 행을 합치는 방법으로 올바른 것은 무엇인가요?
- df.append()
- df.add()
- df.concat()
- df.combine()
문제 15
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.loc[:, 'A']
print(result)
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.loc[:, 'A']
print(result)
-
0 1 1 2 2 3 Name: A, dtype: int64
0 1 1 2 2 3 Name: A, dtype: int64
-
A 1 B 4 Name: 0, dtype: int64
A 1 B 4 Name: 0, dtype: int64
-
A 1 A 2 A 3 Name: A, dtype: int64
A 1 A 2 A 3 Name: A, dtype: int64
-
1 4 2 5 3 6 Name: B, dtype: int64
1 4 2 5 3 6 Name: B, dtype: int64
문제 16
DataFrame에서 특정 행을 삭제하는 메서드는 무엇인가요?
- drop()
- remove()
- delete()
- discard()
문제 17
DataFrame의 특정 열을 기준으로 행의 순서를 변경하는 방법은 무엇인가요?
- df.sort()
- df.order()
- df.sort_index()
- df.sort_values()
문제 18
DataFrame에서 모든 결측치를 포함한 행을 삭제하려면 어떻게 해야 하나요?
- df.dropna(how='all')
- df.dropna(how='any')
- df.dropna(thresh=1)
- df.dropna(axis=1)
문제 19
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
df = pd.DataFrame({'A': [1, None, 3], 'B': [4, 5, None]})
result = df.fillna(0)
print(result)
import pandas as pd
df = pd.DataFrame({'A': [1, None, 3], 'B': [4, 5, None]})
result = df.fillna(0)
print(result)
-
A B 0 1.0 4.0 1 0.0 5.0 2 3.0 0.0
A B 0 1.0 4.0 1 0.0 5.0 2 3.0 0.0
-
A B 0 1 4 1 0 5 2 3 0
A B 0 1 4 1 0 5 2 3 0
-
A B 0 1.0 4.0 1 2.0 5.0 2 3.0 6.0
A B 0 1.0 4.0 1 2.0 5.0 2 3.0 6.0
-
A B 0 1.0 4.0 1 NaN 5.0 2 3.0 NaN
A B 0 1.0 4.0 1 NaN 5.0 2 3.0 NaN
문제 20
DataFrame에서 열의 데이터 타입을 변경하는 메서드는 무엇인가요?
- change_type()
- convert_type()
- astype()
- set_type()
문제 21
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, np.nan, np.nan, 8], 'C': [9, 10, 11, 12]})
result = df.dropna(thresh=2)
print(result)
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, np.nan, np.nan, 8], 'C': [9, 10, 11, 12]})
result = df.dropna(thresh=2)
print(result)
-
A B C 0 1.0 5.0 9 1 2.0 NaN 10 3 4.0 8.0 12
A B C 0 1.0 5.0 9 1 2.0 NaN 10 3 4.0 8.0 12
-
A B C 0 1.0 5.0 9 3 4.0 8.0 12
A B C 0 1.0 5.0 9 3 4.0 8.0 12
-
A B C 0 1.0 5.0 9 1 2.0 NaN 10 2 NaN NaN 11 3 4.0 8.0 12
A B C 0 1.0 5.0 9 1 2.0 NaN 10 2 NaN NaN 11 3 4.0 8.0 12
-
A B C 0 1.0 5.0 9
A B C 0 1.0 5.0 9
문제 22
fillna() 메서드를 사용할 때, 올바르지 않은 것은 무엇인가요?
- df.fillna(method='ffill') 는 이전 값으로 결측치를 채운다.
- df.fillna(method='bfill') 는 다음 값으로 결측치를 채운다.
- df.fillna(df.mean()) 는 각 열의 평균값으로 결측치를 채운다.
- df.fillna(axis=1) 는 각 행의 평균값으로 결측치를 채운다.
문제 23
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
df = pd.DataFrame({'A': ['1', '2', '3', '4'], 'B': [1.0, 2.0, 3.0, 4.0]})
df['A'] = df['A'].astype('int')
df['B'] = df['B'].astype('float32')
print(df.dtypes)
df = pd.DataFrame({'A': ['1', '2', '3', '4'], 'B': [1.0, 2.0, 3.0, 4.0]})
df['A'] = df['A'].astype('int')
df['B'] = df['B'].astype('float32')
print(df.dtypes)
-
A int32 B float32 dtype: object
A int32 B float32 dtype: object
-
A int64 B float32 dtype: object
A int64 B float32 dtype: object
-
A object B float64 dtype: object
A object B float64 dtype: object
-
A int64 B float64 dtype: object
A int64 B float64 dtype: object
문제 24
sort_values() 메서드를 사용할 때, 올바르지 않은 것은 무엇인가요?
- df.sort_values('column1', ascending=False) 는 'column1'을 기준으로 내림차순 정렬한다.
- df.sort_values(['column1', 'column2']) 는 'column1'을 먼저 정렬하고, 같은 값에 대해 'column2'로 정렬한다.
- df.sort_values('column1', inplace=True) 는 원본 DataFrame을 직접 수정한다.
- df.sort_values('column1', axis=1) 는 'column1'의 값을 기준으로 열을 정렬한다.
문제 25
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
result = pd.merge(df1, df2, on='key', how='outer', suffixes=('_left', '_right'))
print(result)
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
result = pd.merge(df1, df2, on='key', how='outer', suffixes=('_left', '_right'))
print(result)
-
key value_left value_right 0 A 1.0 4.0 1 B 2.0 5.0 2 C 3.0 NaN 3 D NaN 6.0
key value_left value_right 0 A 1.0 4.0 1 B 2.0 5.0 2 C 3.0 NaN 3 D NaN 6.0
-
key value_left value_right 0 A 1.0 4.0 1 B 2.0 5.0
key value_left value_right 0 A 1.0 4.0 1 B 2.0 5.0
-
key value 0 A 1 1 B 2 2 C 3 3 A 4 4 B 5 5 D 6
key value 0 A 1 1 B 2 2 C 3 3 A 4 4 B 5 5 D 6
-
key value_left value_right 0 A 1.0 4.0 1 B 2.0 5.0 2 C 3.0 NaN
key value_left value_right 0 A 1.0 4.0 1 B 2.0 5.0 2 C 3.0 NaN
문제 26
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
df = pd.DataFrame({'A': [1, np.nan, 3], 'B': [4, 5, np.nan]})
result = df.interpolate()
print(result)
import pandas as pd
df = pd.DataFrame({'A': [1, np.nan, 3], 'B': [4, 5, np.nan]})
result = df.interpolate()
print(result)
-
A B 0 1.0 4.0 1 2.0 5.0 2 3.0 5.0
A B 0 1.0 4.0 1 2.0 5.0 2 3.0 5.0
-
A B 0 1.0 4.0 1 NaN 5.0 2 3.0 NaN
A B 0 1.0 4.0 1 NaN 5.0 2 3.0 NaN
-
A B 0 1.0 4.0 1 1.0 5.0 2 3.0 5.0
A B 0 1.0 4.0 1 1.0 5.0 2 3.0 5.0
-
A B 0 1.0 4.0 1 2.0 5.0 2 3.0 NaN
A B 0 1.0 4.0 1 2.0 5.0 2 3.0 NaN
문제 27
DataFrame에서 특정 열을 기준으로 그룹화하고 여러 집계 함수를 적용하려면 어떻게 해야 하나요?
- df.groupby('column').apply(['mean', 'sum'])
- df.groupby('column').agg({'A': 'mean', 'B': 'sum'})
- df.groupby('column').transform(['mean', 'sum'])
- df.groupby('column').aggregate(['mean', 'sum'])
문제 28
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar'],
'B': ['one', 'one', 'two', 'two'],
'C': [1, 2, 3, 4]})
result = df.pivot(index='A', columns='B', values='C')
print(result)
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar'],
'B': ['one', 'one', 'two', 'two'],
'C': [1, 2, 3, 4]})
result = df.pivot(index='A', columns='B', values='C')
print(result)
-
B one two A bar 2 4 foo 1 3
B one two A bar 2 4 foo 1 3
-
B one two A bar 1 3 foo 2 4
B one two A bar 1 3 foo 2 4
-
one two A bar 1 3 foo 2 4
one two A bar 1 3 foo 2 4
-
one two A bar 2 4 foo 1 3
one two A bar 2 4 foo 1 3
문제 29
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': [np.nan, 2, np.nan, 4],
'C': [5, np.nan, np.nan, 8]
})
result = df.fillna(df.mean())
print(result)
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': [np.nan, 2, np.nan, 4],
'C': [5, np.nan, np.nan, 8]
})
result = df.fillna(df.mean())
print(result)
-
A B C 0 1.0 3.0 5.0 1 2.0 2.0 6.5 2 3.0 3.0 6.5 3 4.0 4.0 8.0
A B C 0 1.0 3.0 5.0 1 2.0 2.0 6.5 2 3.0 3.0 6.5 3 4.0 4.0 8.0
-
A B C 0 1.0 3.0 5.0 1 2.0 2.0 6.5 2 3.0 2.0 6.5 3 4.0 4.0 8.0
A B C 0 1.0 3.0 5.0 1 2.0 2.0 6.5 2 3.0 2.0 6.5 3 4.0 4.0 8.0
-
A B C 0 1.0 NaN 5.0 1 2.0 2.0 NaN 2 3.0 NaN NaN 3 4.0 4.0 8.0
A B C 0 1.0 NaN 5.0 1 2.0 2.0 NaN 2 3.0 NaN NaN 3 4.0 4.0 8.0
-
A B C 0 1.0 NaN 5.0 1 2.0 2.0 6.5 2 3.0 NaN 6.5 3 4.0 4.0 8.0
A B C 0 1.0 NaN 5.0 1 2.0 2.0 6.5 2 3.0 NaN 6.5 3 4.0 4.0 8.0
문제 30
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar'],
'B': ['one', 'one', 'two', 'two'],
'C': [1, 3, 2, 4]
})
result = df.pivot_table(index='A', columns='B', values='C', aggfunc='sum')
print(result)
import pandas as pd
df = pd.DataFrame({
'A': ['foo', 'bar', 'foo', 'bar'],
'B': ['one', 'one', 'two', 'two'],
'C': [1, 3, 2, 4]
})
result = df.pivot_table(index='A', columns='B', values='C', aggfunc='sum')
print(result)
-
B one two A bar 3 4 foo 1 2
B one two A bar 3 4 foo 1 2
-
B one two A bar 4 3 foo 2 1
B one two A bar 4 3 foo 2 1
-
B one two A bar 3 4 foo 2 1
B one two A bar 3 4 foo 2 1
-
B one two A bar 4 2 foo 1 3
B one two A bar 4 2 foo 1 3
문제 31
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]})
df.iloc[1, 1] = np.nan
result = df.fillna(method='ffill').fillna(method='bfill') - df
print(result.iloc[1:3, 1:])
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 10, 11, 12]})
df.iloc[1, 1] = np.nan
result = df.fillna(method='ffill').fillna(method='bfill') - df
print(result.iloc[1:3, 1:])
-
B C 1 0.0 0.0 2 1.0 0.0
B C 1 0.0 0.0 2 1.0 0.0
-
B C 1 1.0 0.0 2 0.0 0.0
B C 1 1.0 0.0 2 0.0 0.0
-
B C 1 NaN 0.0 2 0.0 0.0
B C 1 NaN 0.0 2 0.0 0.0
-
B C 1 -1.0 0.0 2 0.0 0.0
B C 1 -1.0 0.0 2 0.0 0.0
문제 32
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b'], 'B': [1, 2, 3, 4], 'C': [5, 6, 7, 8]})
result = df.groupby('A').agg({'B': 'first', 'C': 'last'}).reset_index()
print(result.loc[result['B'] < result['C'], 'A'].iloc[0])
df = pd.DataFrame({'A': ['a', 'b', 'a', 'b'], 'B': [1, 2, 3, 4], 'C': [5, 6, 7, 8]})
result = df.groupby('A').agg({'B': 'first', 'C': 'last'}).reset_index()
print(result.loc[result['B'] < result['C'], 'A'].iloc[0])
- 'a'
- 'b'
- IndexError
- None of the above
문제 33
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'C': [7, 8]})
result = pd.concat([df1, df2], axis=0).fillna(0).astype(int)
print(result.iloc[2:, 1:].sum().sum())
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'C': [7, 8]})
result = pd.concat([df1, df2], axis=0).fillna(0).astype(int)
print(result.iloc[2:, 1:].sum().sum())
- 7
- 8
- 15
- 19
문제 34
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
df = pd.DataFrame({'A': ['X', 'Y', 'Z', 'X', 'Y'], 'B': [1, 2, 3, 4, 5]})
result = df.set_index('A').loc[['X', 'Y', 'Z', 'W'], 'B'].reset_index()
print(result['B'].fillna(method='ffill').sum())
df = pd.DataFrame({'A': ['X', 'Y', 'Z', 'X', 'Y'], 'B': [1, 2, 3, 4, 5]})
result = df.set_index('A').loc[['X', 'Y', 'Z', 'W'], 'B'].reset_index()
print(result['B'].fillna(method='ffill').sum())
- 15
- 12
- 18
- ValueError
문제 35
다음 코드의 실행 결과로 올바른 것은 무엇인가요?
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
mask = df > df.mean()
result = df[mask].fillna(0).astype(int)
print(result.iloc[:2, 1:].values.flatten().tolist())
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
mask = df > df.mean()
result = df[mask].fillna(0).astype(int)
print(result.iloc[:2, 1:].values.flatten().tolist())
- [5, 6, 8, 9]
- [0, 6, 0, 9]
- [5, 0, 8, 0]
- [0, 0, 8, 9]
정답
문제 번호 | 정답 | 문제 번호 | 정답 | 문제 번호 | 정답 | 문제 번호 | 정답 |
---|---|---|---|---|---|---|---|
1 | 1 | 11 | 3 | 21 | 2 | 31 | 2 |
2 | 2 | 12 | 2 | 22 | 4 | 32 | 1 |
3 | 1 | 13 | 1 | 23 | 2 | 33 | 1 |
4 | 2 | 14 | 1 | 24 | 4 | 34 | 1 |
5 | 1 | 15 | 1 | 25 | 1 | 35 | 3 |
6 | 4 | 16 | 1 | 26 | 1 | ||
7 | 1 | 17 | 4 | 27 | 4 | ||
8 | 1 | 18 | 1 | 28 | 4 | ||
9 | 4 | 19 | 1 | 29 | 1 | ||
10 | 1 | 20 | 3 | 30 | 1 |