OX 10문항 + 5지선다형 10문항 · 예시 코드와 출력 결과 포함
Pandas의 Series는 1차원 배열 형태의 자료구조이다.
Series는 인덱스를 가지는 1차원 데이터 구조입니다. 한 줄짜리 표 또는 이름표가 붙은 리스트처럼 생각할 수 있습니다.
import pandas as pd
s = pd.Series([80, 90, 100], index=['국어', '영어', '수학'])
print(s)
print(type(s).__name__)
국어 80
영어 90
수학 100
dtype: int64
Series
DataFrame에서 특정 열을 선택하면 그 결과는 항상 또 다른 DataFrame이다.
DataFrame에서 한 열만 df["열이름"]으로 선택하면 Series가 반환됩니다. DataFrame으로 유지하려면 df[["열이름"]]처럼 대괄호를 두 번 사용합니다.
import pandas as pd
df = pd.DataFrame({'name':['민수','지민'], 'score':[90,85]})
one_col = df['score']
two_bracket = df[['score']]
print(type(one_col).__name__)
print(type(two_bracket).__name__)
Series
DataFrame
.loc는 인덱스의 이름(label)을 사용하여 행을 선택한다.
.loc는 라벨 기반 선택입니다. 반대로 .iloc는 0, 1, 2 같은 정수 위치를 기준으로 선택합니다.
import pandas as pd
df = pd.DataFrame({'score':[95,88]}, index=['철수','영희'])
print(df.loc['철수'])
print(df.iloc[0])
score 95
Name: 철수, dtype: int64
score 95
Name: 철수, dtype: int64
df.sort_values(by="age")는 원본 데이터프레임 df를 직접 수정한다.
sort_values()는 기본적으로 정렬된 새 DataFrame을 반환합니다. 원본을 직접 바꾸려면 inplace=True를 사용하거나 결과를 다시 df에 저장해야 합니다.
import pandas as pd
df = pd.DataFrame({'name':['A','B'], 'age':[30,20]})
sorted_df = df.sort_values(by='age')
print(df['age'].tolist())
print(sorted_df['age'].tolist())
[30, 20]
[20, 30]
df.dropna()는 결측치(NaN)가 포함된 모든 열(column)을 삭제한다.
dropna()는 기본값으로 결측치가 있는 행(row)을 삭제합니다. 열(column)을 삭제하려면 axis=1을 지정해야 합니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[1, np.nan], 'B':[3, 4]})
print(df.dropna())
A B
0 1.0 3
groupby() 메소드는 데이터를 그룹으로 묶고 각 그룹에 대한 집계 함수를 적용하는 데 사용된다.
groupby()는 같은 범주끼리 데이터를 묶은 뒤 평균, 합계, 개수 같은 집계 연산을 할 때 사용합니다.
import pandas as pd
df = pd.DataFrame({
'class':['A','A','B','B'],
'score':[80,90,70,100]
})
print(df.groupby('class')['score'].mean())
class
A 85.0
B 85.0
Name: score, dtype: float64
pd.read_excel() 함수는 텍스트 파일을 읽어 DataFrame으로 만드는 함수이다.
pd.read_excel()은 엑셀 파일을 읽습니다. CSV 같은 텍스트 파일은 보통 pd.read_csv()를 사용합니다.
import pandas as pd
from io import StringIO
csv_text = 'name,score\n민수,90\n지민,85'
df = pd.read_csv(StringIO(csv_text))
print(df)
name score
0 민수 90
1 지민 85
두 개의 DataFrame을 합칠 때 사용하는 대표적인 함수는 pd.merge()이다.
pd.merge()는 공통 열을 기준으로 두 DataFrame을 합치는 함수입니다. SQL의 JOIN과 비슷합니다.
import pandas as pd
df1 = pd.DataFrame({'id':[1,2], 'name':['민수','지민']})
df2 = pd.DataFrame({'id':[1,2], 'score':[90,85]})
print(pd.merge(df1, df2, on='id'))
id name score
0 1 민수 90
1 2 지민 85
데이터프레임의 상위 5개 행을 확인하는 메소드는 .top() 이다.
DataFrame의 앞부분을 확인하는 메서드는 .head()입니다. .top()은 Pandas DataFrame의 기본 메서드가 아닙니다.
import pandas as pd
df = pd.DataFrame({'num':[1,2,3,4,5,6]})
print(df.head())
num
0 1
1 2
2 3
3 4
4 5
df["age"] > 20 과 같은 조건식을 df[...] 안에 넣으면 조건에 맞는 행만 필터링할 수 있다.
이 방식은 불리언 인덱싱입니다. 조건식의 결과가 True인 행만 선택됩니다.
import pandas as pd
df = pd.DataFrame({'name':['A','B','C'], 'age':[18,21,25]})
print(df[df['age'] > 20])
name age
1 B 21
2 C 25
Pandas 라이브러리를 사용할 때, 일반적으로 어떤 별칭(alias)으로 임포트하는가?
Pandas는 관례적으로 pd라는 별칭으로 불러옵니다. 대부분의 예제와 문서가 이 표기를 사용합니다.
import pandas as pd
print(pd.__name__)
pandas
딕셔너리를 사용하여 DataFrame을 생성하는 올바른 코드는?
pd.DataFrame()에 딕셔너리를 넣으면 딕셔너리의 키는 열 이름이 되고, 값 리스트는 각 열의 데이터가 됩니다.
import pandas as pd
df = pd.DataFrame({
'name':['민수','지민'],
'score':[90,85]
})
print(df)
name score
0 민수 90
1 지민 85
DataFrame df의 행과 열의 개수를 확인하는 속성(attribute)은?
df.shape는 (행 개수, 열 개수)를 튜플로 반환합니다. 예를 들어 (3, 2)는 3행 2열을 뜻합니다.
import pandas as pd
df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6]})
print(df.shape)
(3, 2)
DataFrame df의 0번부터 4번까지의 행을 정수 위치로 선택하는 올바른 방법은?
.iloc는 정수 위치 기반이며 슬라이싱의 끝 번호를 포함하지 않습니다. 0번부터 4번까지 선택하려면 0:5를 사용합니다.
import pandas as pd
df = pd.DataFrame({'num':[10,20,30,40,50,60]})
print(df.iloc[0:5])
num
0 10
1 20
2 30
3 40
4 50
결측치를 특정 값(예: 0)으로 채우는 메소드는?
fillna()는 NaN 값을 지정한 값으로 바꿉니다. 결측치를 삭제하는 dropna()와 구분해야 합니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'score':[90, np.nan, 80]})
print(df.fillna(0))
score
0 90.0
1 0.0
2 80.0
df의 "score" 열의 모든 값에 10을 더하여 새로운 "new_score" 열을 만드는 올바른 코드는?
Pandas는 열 단위 벡터화 연산을 지원하므로, 열 전체에 10을 더해 새 열로 저장할 수 있습니다.
import pandas as pd
df = pd.DataFrame({'score':[70,80,90]})
df['new_score'] = df['score'] + 10
print(df)
score new_score
0 70 80
1 80 90
2 90 100
df의 "department" 열을 기준으로 그룹화하여 각 부서의 평균 "salary"를 계산하는 코드는?
먼저 department로 그룹을 만들고, salary 열을 선택한 뒤 평균 mean()을 계산합니다.
import pandas as pd
df = pd.DataFrame({
'department':['AI','AI','SW'],
'salary':[300,500,400]
})
print(df.groupby('department')['salary'].mean())
department
AI 400.0
SW 400.0
Name: salary, dtype: float64
DataFrame의 기술 통계 정보(평균, 표준편차 등)를 한 번에 보여주는 메소드는?
.describe()는 개수, 평균, 표준편차, 최솟값, 사분위수, 최댓값 같은 요약 통계를 보여줍니다.
import pandas as pd
df = pd.DataFrame({'score':[70,80,90]})
print(df.describe())
score
count 3.0
mean 80.0
std 10.0
min 70.0
25% 75.0
50% 80.0
75% 85.0
max 90.0
다음 중 df1과 df2를 key 열 기준으로 합치되, df1의 모든 행을 유지하는 코드는?
left join은 왼쪽 DataFrame(df1)의 모든 행을 유지하고, 오른쪽 DataFrame(df2)에서 key가 맞는 값을 붙입니다.
import pandas as pd
df1 = pd.DataFrame({'key':[1,2,3], 'name':['A','B','C']})
df2 = pd.DataFrame({'key':[1,2], 'score':[90,80]})
print(pd.merge(df1, df2, on='key', how='left'))
key name score
0 1 A 90.0
1 2 B 80.0
2 3 C NaN
apply 메소드에 lambda 함수를 사용하는 주된 이유는?
lambda는 이름 없는 짧은 함수를 만들 때 사용합니다. apply와 함께 쓰면 각 값이나 행에 간단한 규칙을 바로 적용할 수 있습니다.
import pandas as pd
df = pd.DataFrame({'score':[70,80,90]})
df['pass'] = df['score'].apply(lambda x: '통과' if x >= 80 else '미통과')
print(df)
score pass
0 70 미통과
1 80 통과
2 90 통과