ssung_인턴일지

14일차_pandas 주요 기능 복습

ssungcohol 2024. 7. 20. 18:30

EDA 및 Preprocessing 작업을 진행하면서 많이 사용했던 것들을

 

다시 예제를 통해 복습해보자


CSV 파일 가져오기

import pandas as pd

df = pd.read_csv('file_path')

print(df)

 

이때 파일이 아닌 폴더가 되는 경우에는 다음과 같이 경로를 수정해주면 된다

import pandas as pd
import os

# 폴더 경로 설정
folder_path = r'C\abcdefg\hj\km~'

# 폴더 내의 모든 파일에 대해 반복하고자 하는 경우
for filename in os.llistdir(folder_path):

	# 불러오고자 하는 파일 (예 = csv)
    if filename.endswith('.csv'):
    	file_path = os.path.join(folder_path, filename)       
        ...
        ...
        ...

 

여기서 주의할 점은 반복문 안의 조건문에서 파일의 형식을 확인할 때

filename.endwith(~~)가 아니라 filename.endswith(~~) 라는 것을 꼭 확인하자~!

(해당 오타로 인해 몇 십분은 잡아 먹음...)


CSV 파일 가져올 때 index column 빼고 가지고 오기

# csv 파일 인덱스 없이 불러오기
df = pd.read_csv('file_path', index_col = 0)

# csv 파일 저장 시 인덱스 없이 저장
df = to_csv('file_path', index = False)

 

사실 해당 index가 없게 파일을 불러온 적은 없지만, 기억해두면 사용할 수도 있을 것 같아 기록


CSV 파일 불러올 때 한글이 깨지는 경우

df = pd.read_csv('file_path', encoding = 'CP949')

# 또는 chardet 라이브러리를 이용해 인코딩을 확인 후 파일 불러오기

import chardet

def detect_encoding(file_path):
	with open(file_path, 'rb') as f:
    	raw_data = f.read()
    result = chardet.detect(raw_data)
    return result['encoding']
    
df = pd.read_csv('file_path', encoding = encoding)

 

인코딩 문제 때문에 살짝? 고생을 했지만, chardet 라이브러리를 통해 간단하게 해결했음

폴더 내의 파일들의 인코딩 형식이 통일이 되면 좋았겠지만,

다른 경우들이 있었기에, 이때마다 인코딩 형식을 변경해주는 것은 불가능!

따라서 chardet 라이브러리를 통해 함수를 정의하여 편리하게 해결할 수 있었음


CSV 파일 숫자 데이터를 숫자가 아닌 string 형태로 불러오고 싶을 때

# 1. 모든 열 string으로 가지고 오기
pd.read_csv('file_path', dtype = str)

# 특정 열만 string으로 가지고 오기
# 1. string으로 불러오고 싶은 열을 list에 담기
list_str_col = ['abdc', 'efgh']

# 2. dictionary comprehension으로 dict 만들기
dict_dtypes = {x : 'str' for x in list_str_col}

# 3. 만든 dict를 dtype에 집어넣기
pd.read_csv('file_path', dtype = dict_dtypes)

 

해당 기능을 기록한 이유는 

pandas는 data 앞에 0이 있으면 0을 제외하고 데이터를 가지고 오기 때문에 기록


날짜 (datetime)은 바로 datetime Object로 인식하고 싶을 때

# parse_dates라는 parameter 활용
date_cols = ['날짜']
newtext_df = pd.read_csv('file_path', parse_dates = date_cols)

# 또는 구체적으로 date-parser를 지정하는 것도 가능
from datetime import datetime
dateparse = lambda x : datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv(infile, parse_dates = ['datetime'], date_parse = dateparse)
728x90

'ssung_인턴일지' 카테고리의 다른 글

11-13일차_EDA 도출  (1) 2024.07.18
10일차_Image stitching  (0) 2024.07.14
9일차_EDA란?  (1) 2024.07.14
8일차_Data Preprocessing(3)  (0) 2024.07.11
7일차_Data Preprocessing(2)  (0) 2024.07.08