안녕하세요
데이터 분석의 길에 들어온 짐민입니다....
Pandas로 csv 파일 등을 읽어들여서 어떻게 처리하는지 연습해보기 위해 책을 읽고 따라해보는 글입니다.

파이썬 머신러닝 완벽 가이드 | 권철민 - 교보문고
파이썬 머신러닝 완벽 가이드 | 자세한 이론 설명과 파이썬 실습을 통해 머신러닝을 완벽하게 배울 수 있습니다!《파이썬 머신러닝 완벽 가이드》는 이론 위주의 머신러닝 책에서 탈피해, 다양
product.kyobobook.co.kr
참고한 책
우선 노트북 환경을 위하여 구글 코랩에서 진행했습니다.
import pandas as pd
titanic_df = pd.read_csv(r'/content/sample_data/train.csv')
일단 국룰로 pd로 불러오고,
csv 파일을 불러옵니다.
파일은 캐글에서 가져왔습니다.
titanic_df.head(3)
print('데이터프레임 크기 :', titanic_df.shape)

head(3) 함수를 통해 가장 앞의 3개의 행을 담은 데이터프레임을 받아볼 수 있고
데이터프레임 크기 : (891, 12)
shape를 통해 행, 열의 사이즈를 볼 수 있습니다.
titanic_df.describe()

decribe()를 통해 값들의 평균, 표준편차, median 값 등을 정리한 값을 볼 수 있습니다.
print(titanic_df['Pclass'].value_counts())

object처럼 []에 원하는 칼럼의 값을 넣으면 Series라는 객체가 생성되고,
value_counts를 통해 어떤 값이 몇 개나 있는지 볼 수 있습니다.
이는 Null 값은 무시하고 보여주는데, value_counts() 안에 dropna=False를 넣어주면
(value_counts(dropna=False) 이렇게요)
Null 값들도 포함해서 보여줍니다.
titanic_df['idk'] = 0
titanic_df.head(3)
칼럼을 추가하고 0으로 초기화하려면 이렇게 새 칼럼을 정의해주면 됩니다.
titanic_df['Age'] = titanic_df['Age'] + 80
titanic_df.head(3)
원래 있던 칼럼의 값도 코드 한 줄로 싹 다 바꿔줄 수 있습니다.
데이터프레임 ↔ 넘파이 ndarray
데이터프레임을 ndarray로 바꾸는 것은 아주 쉽습니다.

데이터프레임의 values를 쓰면 바로 변환이 됩니다.
ndarray를 데이터프레임으로 바꾸려면 pd.DataFrame()를 사용하면 됩니다.
리스트나 넘파이의 ndarray를 함수의 인자로 넘겨주면 됩니다.
칼럼 값도 지정을 해주고요,,
col_name1=['col1']
list1 = [1, 2, 3]
array1 = np.array(list1)
df_array1 = pd.DataFrame(array1, columns=col_name1)
print('1차원 ndarray로 만든 DataFrame:\n', df_array1)
2차원 배열을 사용해서 여러 칼럼을 가지는 데이터프레임 또한 만들 수 있습니다.
titanic_drop_df = titanic_df.drop('Age', axis=1)
titanic_drop_df.head(3)

drop()은 데이터를 지울 때 쓸 수 있습니다.
axis = 1 는 칼럼을 지울 때, axis = 0는 행을 지울 때 사용합니다.
또한 옵션값으로 inplace=True를 주게 된다면 원본 데이터에서도 삭제가 됩니다.
titanic_df[['Name', 'Sex', 'Ticket']].head()
titanic_df[3:19] # 하지만 이건 가능함
titanic_df[titanic_df['Sex'] == 'male'].head()
[ ] 연산자를 사용하여 데이터프레임의 값들을 필터링하는 방법입니다.
데이터프레임의 칼럼값을 데이터프레임 뒤에 넣어주면 해당 칼럼만 볼 수 있습니다.
칼럼값을 넣어야 하기 때문에 인덱스인 3 같은 숫자는 넣을 수가 없습니다만,
리스트 슬라이싱과 같은 방법으로 슬라이싱은 할 수 있습니다.
(책에서는 추천하는 방법은 아니라고 함)
또한 불리언 연산으로 Row값에 따라 걸러줄 수도 있습니다.
불리언 연산은 여러 조건을 달 수도 있는데 연산자가 약간 생소해서 정리를 해보자면,
and 연산 &, or 연산 |, not일 때는 ~를 써야 합니다.
titanic_df[(titanic_df['Age'] > 50) & (titanic_df['Sex' == 'female'])].head()
이런 식으로 두 가지 조건을 연결할 수 있습니다.
head()를 쓸 수 있는 걸 보면 알 수 있듯 저것도 데이터프레임을 반환하기 때문에,
또 가공하여 사용할 수도 있습니다.
iloc과 loc
iloc 함수는 위치 기반 인덱싱, loc은 label별 인덱싱입니다.

예컨대 iloc은 이렇게 사용합니다.
인덱스 제외하고 titanic_df의 1번째 행과 3번째 열을 보면 (0에서 시작)
저 이름이 표시될 것입니다.
이렇게 한 개의 인덱스를 찾을 수도 있고,

여러 개의 행/칼럼도 가져올 수 있습니다.
이제 loc에 대해 알아보자면,

loc은 명칭에 기반해 인덱싱하기 때문에 행/칼럼명으로 인덱싱이 가능합니다.
여기서 슬라이싱과 같이 4:9를 하면 4~8까지만 불러오는 걸로 착각할 수 있지만
loc은 9까지도 다 가져오는 걸 잊어서는 안 됩니다!
결손 데이터 처리
NaN으로 처리된 데이터을 처리하려면 fillna() 를 사용할 수 있습니다.
NaN 데이터가 몇 개인지 보려면 일단 isna() 함수를 사용할 수 있습니다.
isna() 함수는 필드값이 NaN이면 True, 아니면 False를 내보냅니다.
titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C00')
fillna에 넣은 값으로 NaN을 대체할 수 있습니다.
fillna()에도 inplace=True 옵션을 줘서 원본값에도 영향을 줄지 말지 선택할 수 있습니다.
이 정도만 알아보고 다음엔 머신러닝 내용을 다뤄보려고 합니다.
감사합니다~
'CS > AI' 카테고리의 다른 글
| [ML] Scikit-learn을 활용해서 캐글 데이터 분석하기! (0) | 2025.04.02 |
|---|---|
| [ML] Scikit-learn을 사용한 분류 (1) (0) | 2025.03.31 |
| sesame/csm-1b 오픈소스 공개, 환경 세팅 후 사용해보기 (0) | 2025.03.20 |
| [프롬프트 엔지니어링] CoT (Chain of Thought) 프롬프팅 (0) | 2024.12.31 |
| [프롬프트 엔지니어링] 명확한 구분자와 제로샷, 원샷, 퓨샷 프롬프팅 (0) | 2024.12.26 |
